/*
 * Copyright Codeplay Software Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use these files except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// DO NOT MODIFY BY HAND
// This file was automatically generated by generate_pooling_tests.py.
// Results calculated using Tensorflow v1.12.0.

#include <gtest/gtest.h>

#include "sycldnn/padding_mode.h"

#include "sycldnn/pooling/operators.h"

#include "test/types/cartesian_product.h"
#include "test/types/kernel_data_types.h"
#include "test/types/test_backend_types.h"
#include "test/types/to_gtest_types.h"

#include "test/pooling/pooling_fixture.h"

#include <array>
#include <vector>

using namespace sycldnn;  // NOLINT(google-build-using-namespace)
using DataTypeList = sycldnn::types::KernelDataTypes;
using Backends = sycldnn::types::DefaultBackendTypes;

using SNNTypePairs =
    sycldnn::types::CartesianProduct<DataTypeList, Backends>::type;
using GTestTypePairs = sycldnn::types::ToGTestTypes<SNNTypePairs>::type;

template <typename Pair>
using AvgWindow3Stride1Grad =
    PoolingFixture<typename Pair::FirstType, typename Pair::SecondType,
                   pooling::Average, pooling::Backpropagate>;
TYPED_TEST_SUITE(AvgWindow3Stride1Grad, GTestTypePairs);
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      2.083333333333333,  3.3611111111111107, 4.611111111111111,
      3.6111111111111107, 4.694444444444445,  7.194444444444444,
      8.944444444444443,  6.833333333333333,  9.694444444444443,
      14.194444444444443, 15.944444444444443, 11.833333333333332,
      8.194444444444443,  11.916666666666666, 13.166666666666666,
      9.722222222222221};
  const std::array<int, 4> in_shape = {{1, 4, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.1111111111111111, 0.3333333333333333, 0.3333333333333333,
      0.2222222222222222, 0.4444444444444444, 1.1111111111111112,
      1.1111111111111112, 0.6666666666666666, 0.4444444444444444,
      1.1111111111111112, 1.1111111111111112, 0.6666666666666666,
      0.3333333333333333, 0.7777777777777777, 0.7777777777777777,
      0.4444444444444444};
  const std::array<int, 4> in_shape = {{1, 4, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         18.416666666666664,
                                         19.388888888888886,
                                         27.027777777777775,
                                         28.388888888888886,
                                         30.527777777777775,
                                         31.888888888888886,
                                         22.694444444444443,
                                         23.666666666666664,
                                         15.694444444444445,
                                         16.388888888888886,
                                         22.86111111111111,
                                         23.833333333333332,
                                         25.36111111111111,
                                         26.333333333333332,
                                         18.75,
                                         19.444444444444443};
  const std::array<int, 4> in_shape = {{1, 4, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.1111111111111111, 0.2222222222222222, 0.4444444444444444,
      0.6666666666666666, 0.4444444444444444, 0.6666666666666666,
      0.3333333333333333, 0.4444444444444444, 0.6666666666666667,
      0.8888888888888888, 1.7777777777777777, 2.2222222222222223,
      1.7777777777777777, 2.2222222222222223, 1.111111111111111,
      1.3333333333333333, 0.6666666666666667, 0.8888888888888888,
      1.7777777777777777, 2.2222222222222223, 1.7777777777777777,
      2.2222222222222223, 1.111111111111111,  1.3333333333333333,
      0.5555555555555556, 0.6666666666666666, 1.3333333333333333,
      1.5555555555555554, 1.3333333333333333, 1.5555555555555554,
      0.7777777777777777, 0.8888888888888888};
  const std::array<int, 4> in_shape = {{1, 4, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         35.861111111111114,
                                         36.83333333333333,
                                         37.80555555555555,
                                         38.77777777777777,
                                         52.69444444444444,
                                         54.05555555555555,
                                         55.41666666666666,
                                         56.77777777777777,
                                         59.69444444444444,
                                         61.05555555555555,
                                         62.41666666666666,
                                         63.77777777777777,
                                         44.416666666666664,
                                         45.388888888888886,
                                         46.36111111111111,
                                         47.33333333333333,
                                         30.694444444444443,
                                         31.38888888888889,
                                         32.08333333333333,
                                         32.77777777777777,
                                         44.75,
                                         45.72222222222222,
                                         46.69444444444444,
                                         47.666666666666664,
                                         49.75,
                                         50.72222222222222,
                                         51.69444444444444,
                                         52.666666666666664,
                                         36.80555555555556,
                                         37.5,
                                         38.19444444444444,
                                         38.888888888888886};
  const std::array<int, 4> in_shape = {{1, 4, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777};
  const std::array<int, 4> in_shape = {{1, 4, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      2.3611111111111107, 3.7499999999999996,
      4.166666666666666,  5.972222222222221,
      4.583333333333333,  5.527777777777777,
      8.36111111111111,   8.5,
      11.472222222222221, 8.63888888888889,
      11.777777777777775, 17.11111111111111,
      15.999999999999998, 20.22222222222222,
      14.888888888888888, 10.,
      14.444444444444443, 13.333333333333332,
      16.666666666666664, 12.222222222222221};
  const std::array<int, 4> in_shape = {{1, 4, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         0.4444444444444444,
                                         1.,
                                         1.6666666666666665,
                                         1.2222222222222223,
                                         0.6666666666666666};
  const std::array<int, 4> in_shape = {{1, 4, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         22.583333333333332,
                                         23.55555555555555,
                                         32.861111111111114,
                                         34.22222222222222,
                                         30.83333333333333,
                                         31.999999999999996,
                                         39.08333333333333,
                                         40.44444444444444,
                                         28.805555555555557,
                                         29.777777777777775,
                                         19.305555555555557,
                                         20.,
                                         27.916666666666664,
                                         28.888888888888886,
                                         25.83333333333333,
                                         26.666666666666664,
                                         32.36111111111111,
                                         33.33333333333333,
                                         23.75,
                                         24.444444444444443};
  const std::array<int, 4> in_shape = {{1, 4, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.,
                                         3.,
                                         3.333333333333333,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         1.3333333333333333};
  const std::array<int, 4> in_shape = {{1, 4, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         44.19444444444444,
                                         45.166666666666664,
                                         46.138888888888886,
                                         47.1111111111111,
                                         64.3611111111111,
                                         65.72222222222223,
                                         67.08333333333333,
                                         68.44444444444444,
                                         60.49999999999999,
                                         61.66666666666666,
                                         62.83333333333333,
                                         63.99999999999999,
                                         76.80555555555554,
                                         78.16666666666666,
                                         79.52777777777777,
                                         80.88888888888889,
                                         56.638888888888886,
                                         57.611111111111114,
                                         58.58333333333333,
                                         59.55555555555555,
                                         37.916666666666664,
                                         38.611111111111114,
                                         39.30555555555556,
                                         40.,
                                         54.8611111111111,
                                         55.83333333333333,
                                         56.80555555555556,
                                         57.77777777777777,
                                         50.83333333333333,
                                         51.66666666666666,
                                         52.5,
                                         53.33333333333333,
                                         63.74999999999999,
                                         64.72222222222221,
                                         65.69444444444444,
                                         66.66666666666666,
                                         46.80555555555556,
                                         47.5,
                                         48.19444444444444,
                                         48.888888888888886};
  const std::array<int, 4> in_shape = {{1, 4, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333333,
                                         6.666666666666666,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         2.5555555555555554,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{1, 4, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         13.86111111111111,
                                         20.027777777777775,
                                         18.5,
                                         19.666666666666664,
                                         24.5,
                                         17.944444444444443,
                                         11.805555555555554,
                                         16.97222222222222,
                                         15.499999999999998,
                                         16.333333333333332,
                                         20.166666666666664,
                                         14.722222222222221};
  const std::array<int, 4> in_shape = {{1, 4, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         1.2222222222222223,
                                         2.,
                                         2.333333333333333,
                                         1.6666666666666665,
                                         0.8888888888888888};
  const std::array<int, 4> in_shape = {{1, 4, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         26.75,
                                         27.72222222222222,
                                         38.69444444444444,
                                         40.05555555555555,
                                         35.83333333333333,
                                         37.,
                                         38.166666666666664,
                                         39.33333333333333,
                                         47.638888888888886,
                                         49.,
                                         34.916666666666664,
                                         35.888888888888886,
                                         22.916666666666664,
                                         23.611111111111107,
                                         32.97222222222222,
                                         33.94444444444444,
                                         30.166666666666664,
                                         30.999999999999996,
                                         31.83333333333333,
                                         32.666666666666664,
                                         39.36111111111111,
                                         40.33333333333333,
                                         28.75,
                                         29.444444444444443};
  const std::array<int, 4> in_shape = {{1, 4, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         3.666666666666667,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777};
  const std::array<int, 4> in_shape = {{1, 4, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x4x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         52.52777777777777,
                                         53.5,
                                         54.47222222222222,
                                         55.44444444444444,
                                         76.02777777777777,
                                         77.38888888888889,
                                         78.75,
                                         80.1111111111111,
                                         70.5,
                                         71.66666666666666,
                                         72.83333333333333,
                                         74.,
                                         75.16666666666666,
                                         76.33333333333333,
                                         77.5,
                                         78.66666666666666,
                                         93.91666666666666,
                                         95.27777777777777,
                                         96.63888888888889,
                                         98.,
                                         68.86111111111111,
                                         69.83333333333333,
                                         70.80555555555554,
                                         71.77777777777777,
                                         45.138888888888886,
                                         45.83333333333333,
                                         46.52777777777778,
                                         47.222222222222214,
                                         64.97222222222221,
                                         65.94444444444444,
                                         66.91666666666666,
                                         67.88888888888889,
                                         59.49999999999999,
                                         60.33333333333333,
                                         61.16666666666666,
                                         61.99999999999999,
                                         62.83333333333333,
                                         63.66666666666666,
                                         64.5,
                                         65.33333333333333,
                                         77.75,
                                         78.72222222222221,
                                         79.69444444444443,
                                         80.66666666666666,
                                         56.80555555555556,
                                         57.5,
                                         58.19444444444444,
                                         58.888888888888886};
  const std::array<int, 4> in_shape = {{1, 4, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x4x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         6.999999999999999,
                                         7.333333333333334,
                                         7.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         8.666666666666666,
                                         9.,
                                         9.333333333333332,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554};
  const std::array<int, 4> in_shape = {{1, 4, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.083333333333333,  3.3611111111111107,
                                         4.611111111111111,  3.6111111111111107,
                                         4.694444444444445,  7.194444444444444,
                                         8.944444444444443,  6.833333333333333,
                                         7.833333333333332,  11.5,
                                         12.999999999999998, 9.666666666666666,
                                         13.583333333333332, 19.63888888888889,
                                         21.38888888888889,  15.722222222222221,
                                         10.972222222222221, 15.805555555555555,
                                         17.055555555555557, 12.5};
  const std::array<int, 4> in_shape = {{1, 5, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.3333333333333333,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         1.1111111111111112,
                                         1.1111111111111112,
                                         0.6666666666666666,
                                         1.,
                                         2.3333333333333335,
                                         2.3333333333333335,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         2.,
                                         2.,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         1.2222222222222223,
                                         1.2222222222222223,
                                         0.6666666666666666};
  const std::array<int, 4> in_shape = {{1, 5, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         14.833333333333332,
                                         15.666666666666664,
                                         21.83333333333333,
                                         23.,
                                         24.83333333333333,
                                         25.999999999999996,
                                         18.5,
                                         19.333333333333332,
                                         26.194444444444443,
                                         27.166666666666664,
                                         37.916666666666664,
                                         39.27777777777778,
                                         41.416666666666664,
                                         42.77777777777778,
                                         30.47222222222222,
                                         31.444444444444443,
                                         21.25,
                                         21.944444444444443,
                                         30.638888888888886,
                                         31.61111111111111,
                                         33.138888888888886,
                                         34.111111111111114,
                                         24.305555555555554,
                                         25.};
  const std::array<int, 4> in_shape = {{1, 5, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         4.,
                                         4.666666666666667,
                                         4.,
                                         4.666666666666667,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         3.5555555555555554,
                                         4.,
                                         3.5555555555555554,
                                         4.,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         1.3333333333333333};
  const std::array<int, 4> in_shape = {{1, 5, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         28.833333333333332,
                                         29.666666666666664,
                                         30.499999999999996,
                                         31.33333333333333,
                                         42.49999999999999,
                                         43.66666666666666,
                                         44.83333333333333,
                                         46.,
                                         48.49999999999999,
                                         49.66666666666666,
                                         50.83333333333333,
                                         51.99999999999999,
                                         36.166666666666664,
                                         37.,
                                         37.83333333333333,
                                         38.666666666666664,
                                         51.41666666666667,
                                         52.388888888888886,
                                         53.3611111111111,
                                         54.33333333333333,
                                         74.47222222222223,
                                         75.83333333333333,
                                         77.19444444444444,
                                         78.55555555555556,
                                         81.47222222222221,
                                         82.83333333333333,
                                         84.19444444444444,
                                         85.55555555555556,
                                         59.97222222222222,
                                         60.94444444444444,
                                         61.916666666666664,
                                         62.888888888888886,
                                         41.80555555555556,
                                         42.5,
                                         43.19444444444444,
                                         43.888888888888886,
                                         60.30555555555555,
                                         61.27777777777777,
                                         62.25,
                                         63.22222222222222,
                                         65.30555555555554,
                                         66.27777777777777,
                                         67.25,
                                         68.22222222222223,
                                         47.916666666666664,
                                         48.61111111111111,
                                         49.30555555555556,
                                         50.};
  const std::array<int, 4> in_shape = {{1, 5, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         3.6666666666666665,
                                         4.,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         2.888888888888889,
                                         3.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         6.666666666666667,
                                         7.111111111111111,
                                         7.555555555555555,
                                         8.,
                                         6.666666666666667,
                                         7.111111111111111,
                                         7.555555555555555,
                                         8.,
                                         3.7777777777777777,
                                         3.9999999999999996,
                                         4.222222222222221,
                                         4.444444444444445,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         2.5555555555555554,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{1, 5, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.3611111111111107,
                                         3.7499999999999996,
                                         4.166666666666666,
                                         5.972222222222221,
                                         4.583333333333333,
                                         5.527777777777777,
                                         8.36111111111111,
                                         8.5,
                                         11.472222222222221,
                                         8.63888888888889,
                                         9.5,
                                         13.833333333333334,
                                         13.,
                                         16.5,
                                         12.166666666666664,
                                         16.63888888888889,
                                         23.916666666666664,
                                         21.833333333333332,
                                         27.027777777777775,
                                         19.75,
                                         13.472222222222221,
                                         19.305555555555554,
                                         17.5,
                                         21.52777777777778,
                                         15.694444444444445};
  const std::array<int, 4> in_shape = {{1, 5, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         1.3333333333333333,
                                         2.9999999999999996,
                                         5.,
                                         3.6666666666666665,
                                         2.,
                                         1.222222222222222,
                                         2.6666666666666665,
                                         4.333333333333333,
                                         3.111111111111111,
                                         1.6666666666666665,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         2.6666666666666665,
                                         1.8888888888888888,
                                         1.};
  const std::array<int, 4> in_shape = {{1, 5, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         18.166666666666664,
                                         19.,
                                         26.5,
                                         27.666666666666668,
                                         25.,
                                         26.,
                                         31.833333333333332,
                                         33.,
                                         23.5,
                                         24.33333333333333,
                                         32.30555555555555,
                                         33.27777777777778,
                                         46.47222222222222,
                                         47.83333333333333,
                                         42.5,
                                         43.666666666666664,
                                         52.69444444444445,
                                         54.05555555555555,
                                         38.52777777777777,
                                         39.5,
                                         26.25,
                                         26.944444444444443,
                                         37.638888888888886,
                                         38.61111111111111,
                                         34.166666666666664,
                                         35.,
                                         42.08333333333333,
                                         43.05555555555556,
                                         30.694444444444443,
                                         31.38888888888889};
  const std::array<int, 4> in_shape = {{1, 5, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.999999999999999,
                                         9.,
                                         10.,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.6666666666666665,
                                         4.,
                                         2.2222222222222223,
                                         2.444444444444444,
                                         4.888888888888889,
                                         5.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         5.777777777777778,
                                         6.222222222222222,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         5.,
                                         5.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         1.8888888888888888,
                                         2.};
  const std::array<int, 4> in_shape = {{1, 5, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         35.5,
                                         36.33333333333333,
                                         37.166666666666664,
                                         38.,
                                         51.83333333333333,
                                         53.,
                                         54.16666666666666,
                                         55.333333333333336,
                                         49.,
                                         50.,
                                         51.,
                                         52.,
                                         62.499999999999986,
                                         63.666666666666664,
                                         64.83333333333333,
                                         66.,
                                         46.16666666666666,
                                         47.,
                                         47.83333333333333,
                                         48.66666666666666,
                                         63.638888888888886,
                                         64.6111111111111,
                                         65.58333333333333,
                                         66.55555555555556,
                                         91.58333333333333,
                                         92.94444444444444,
                                         94.30555555555556,
                                         95.66666666666666,
                                         83.83333333333333,
                                         85.,
                                         86.16666666666666,
                                         87.33333333333333,
                                         104.02777777777777,
                                         105.3888888888889,
                                         106.74999999999999,
                                         108.1111111111111,
                                         76.08333333333333,
                                         77.05555555555554,
                                         78.02777777777777,
                                         79.,
                                         51.80555555555555,
                                         52.5,
                                         53.19444444444444,
                                         53.888888888888886,
                                         74.30555555555554,
                                         75.27777777777777,
                                         76.25,
                                         77.22222222222221,
                                         67.5,
                                         68.33333333333333,
                                         69.16666666666666,
                                         70.,
                                         83.19444444444444,
                                         84.16666666666666,
                                         85.13888888888889,
                                         86.11111111111111,
                                         60.69444444444444,
                                         61.388888888888886,
                                         62.08333333333333,
                                         62.77777777777778};
  const std::array<int, 4> in_shape = {{1, 5, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         10.,
                                         10.666666666666668,
                                         11.333333333333334,
                                         11.999999999999998,
                                         17.,
                                         18.,
                                         19.,
                                         20.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333333,
                                         7.666666666666666,
                                         8.,
                                         4.222222222222222,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888888,
                                         9.333333333333332,
                                         9.777777777777779,
                                         10.222222222222221,
                                         10.666666666666666,
                                         15.33333333333333,
                                         16.,
                                         16.666666666666664,
                                         17.333333333333332,
                                         11.111111111111109,
                                         11.555555555555555,
                                         12.,
                                         12.444444444444445,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333334,
                                         10.666666666666666,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.};
  const std::array<int, 4> in_shape = {{1, 5, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         11.166666666666664,
                                         16.166666666666664,
                                         14.999999999999998,
                                         16.,
                                         20.,
                                         14.666666666666666,
                                         19.694444444444443,
                                         28.194444444444443,
                                         25.5,
                                         26.66666666666666,
                                         32.666666666666664,
                                         23.77777777777778,
                                         15.972222222222221,
                                         22.805555555555554,
                                         20.5,
                                         21.333333333333332,
                                         26.,
                                         18.88888888888889};
  const std::array<int, 4> in_shape = {{1, 5, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         3.6666666666666665,
                                         6.,
                                         7.,
                                         4.999999999999999,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         3.3333333333333335,
                                         5.333333333333333,
                                         5.999999999999999,
                                         4.222222222222221,
                                         2.2222222222222223,
                                         1.,
                                         2.111111111111111,
                                         3.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333};
  const std::array<int, 4> in_shape = {{1, 5, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         21.499999999999996,
                                         22.33333333333333,
                                         31.166666666666664,
                                         32.33333333333333,
                                         29.,
                                         29.999999999999996,
                                         31.,
                                         32.,
                                         38.833333333333336,
                                         40.,
                                         28.499999999999996,
                                         29.333333333333332,
                                         38.416666666666664,
                                         39.388888888888886,
                                         55.02777777777777,
                                         56.388888888888886,
                                         49.833333333333336,
                                         51.,
                                         52.166666666666664,
                                         53.33333333333332,
                                         63.97222222222222,
                                         65.33333333333333,
                                         46.58333333333333,
                                         47.55555555555556,
                                         31.25,
                                         31.944444444444443,
                                         44.638888888888886,
                                         45.61111111111111,
                                         40.166666666666664,
                                         41.,
                                         41.83333333333333,
                                         42.666666666666664,
                                         51.02777777777778,
                                         52.,
                                         37.08333333333333,
                                         37.77777777777778};
  const std::array<int, 4> in_shape = {{1, 5, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         6.666666666666666,
                                         7.333333333333333,
                                         11.,
                                         12.,
                                         12.999999999999998,
                                         14.,
                                         9.333333333333332,
                                         9.999999999999998,
                                         5.,
                                         5.333333333333333,
                                         2.888888888888889,
                                         3.111111111111111,
                                         6.222222222222221,
                                         6.666666666666667,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333334,
                                         11.999999999999998,
                                         7.999999999999999,
                                         8.444444444444443,
                                         4.222222222222221,
                                         4.444444444444445,
                                         1.8888888888888888,
                                         2.,
                                         4.,
                                         4.222222222222222,
                                         6.333333333333333,
                                         6.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{1, 5, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x5x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         42.166666666666664,
                                         42.99999999999999,
                                         43.833333333333336,
                                         44.66666666666666,
                                         61.166666666666664,
                                         62.33333333333333,
                                         63.5,
                                         64.66666666666666,
                                         57.,
                                         58.,
                                         59.,
                                         59.99999999999999,
                                         60.99999999999999,
                                         62.,
                                         63.,
                                         64.,
                                         76.5,
                                         77.66666666666667,
                                         78.83333333333331,
                                         80.,
                                         56.166666666666664,
                                         56.99999999999999,
                                         57.83333333333333,
                                         58.666666666666664,
                                         75.86111111111111,
                                         76.83333333333333,
                                         77.80555555555554,
                                         78.77777777777777,
                                         108.69444444444444,
                                         110.05555555555554,
                                         111.41666666666664,
                                         112.77777777777777,
                                         98.5,
                                         99.66666666666667,
                                         100.83333333333333,
                                         102.,
                                         103.16666666666664,
                                         104.33333333333333,
                                         105.5,
                                         106.66666666666664,
                                         126.58333333333333,
                                         127.94444444444444,
                                         129.30555555555554,
                                         130.66666666666666,
                                         92.19444444444444,
                                         93.16666666666666,
                                         94.13888888888889,
                                         95.11111111111111,
                                         61.80555555555556,
                                         62.5,
                                         63.19444444444444,
                                         63.888888888888886,
                                         88.30555555555556,
                                         89.27777777777777,
                                         90.24999999999999,
                                         91.22222222222221,
                                         79.5,
                                         80.33333333333333,
                                         81.16666666666666,
                                         82.,
                                         82.83333333333333,
                                         83.66666666666666,
                                         84.5,
                                         85.33333333333333,
                                         101.08333333333333,
                                         102.05555555555556,
                                         103.02777777777777,
                                         104.,
                                         73.47222222222221,
                                         74.16666666666666,
                                         74.86111111111111,
                                         75.55555555555556};
  const std::array<int, 4> in_shape = {{1, 5, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x5x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333334,
                                         6.666666666666667,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         21.,
                                         22.,
                                         23.,
                                         24.,
                                         25.,
                                         25.999999999999996,
                                         27.,
                                         28.,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         19.999999999999996,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333332,
                                         10.666666666666666,
                                         5.555555555555555,
                                         5.777777777777778,
                                         6.,
                                         6.222222222222222,
                                         11.999999999999998,
                                         12.444444444444443,
                                         12.88888888888889,
                                         13.333333333333334,
                                         19.333333333333332,
                                         20.,
                                         20.666666666666668,
                                         21.333333333333332,
                                         22.,
                                         22.666666666666668,
                                         23.333333333333332,
                                         23.999999999999996,
                                         15.555555555555555,
                                         15.999999999999998,
                                         16.444444444444443,
                                         16.888888888888886,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         12.333333333333332,
                                         12.666666666666666,
                                         13.,
                                         13.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{1, 5, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      2.083333333333333,  3.3611111111111107,
      4.611111111111111,  3.6111111111111107,
      4.694444444444445,  7.194444444444444,
      8.944444444444443,  6.833333333333333,
      7.833333333333332,  11.5,
      12.999999999999998, 9.666666666666666,
      11.166666666666666, 16.166666666666664,
      17.666666666666664, 13.,
      17.47222222222222,  25.083333333333332,
      26.833333333333332, 19.61111111111111,
      13.749999999999998, 19.694444444444443,
      20.944444444444443, 15.277777777777779};
  const std::array<int, 4> in_shape = {{1, 6, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.3333333333333333,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         1.1111111111111112,
                                         1.1111111111111112,
                                         0.6666666666666666,
                                         1.,
                                         2.3333333333333335,
                                         2.3333333333333335,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         3.6666666666666665,
                                         3.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         2.888888888888889,
                                         2.888888888888889,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         1.6666666666666665,
                                         0.8888888888888888};
  const std::array<int, 4> in_shape = {{1, 6, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         14.833333333333332,
                                         15.666666666666664,
                                         21.83333333333333,
                                         23.,
                                         24.83333333333333,
                                         25.999999999999996,
                                         18.5,
                                         19.333333333333332,
                                         21.5,
                                         22.333333333333332,
                                         31.166666666666664,
                                         32.33333333333333,
                                         34.166666666666664,
                                         35.33333333333333,
                                         25.166666666666664,
                                         26.,
                                         33.97222222222222,
                                         34.94444444444444,
                                         48.80555555555555,
                                         50.166666666666664,
                                         52.30555555555555,
                                         53.666666666666664,
                                         38.25,
                                         39.22222222222222,
                                         26.805555555555557,
                                         27.499999999999996,
                                         38.416666666666664,
                                         39.388888888888886,
                                         40.916666666666664,
                                         41.888888888888886,
                                         29.86111111111111,
                                         30.555555555555557};
  const std::array<int, 4> in_shape = {{1, 6, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         4.,
                                         4.666666666666667,
                                         4.,
                                         4.666666666666667,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         6.666666666666666,
                                         7.333333333333333,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.777777777777778,
                                         5.333333333333334,
                                         5.777777777777778,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777};
  const std::array<int, 4> in_shape = {{1, 6, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         28.833333333333332,
                                         29.666666666666664,
                                         30.499999999999996,
                                         31.33333333333333,
                                         42.49999999999999,
                                         43.66666666666666,
                                         44.83333333333333,
                                         46.,
                                         48.49999999999999,
                                         49.66666666666666,
                                         50.83333333333333,
                                         51.99999999999999,
                                         36.166666666666664,
                                         37.,
                                         37.83333333333333,
                                         38.666666666666664,
                                         42.166666666666664,
                                         43.,
                                         43.83333333333333,
                                         44.666666666666664,
                                         61.16666666666666,
                                         62.33333333333333,
                                         63.499999999999986,
                                         64.66666666666666,
                                         67.16666666666666,
                                         68.33333333333333,
                                         69.5,
                                         70.66666666666666,
                                         49.5,
                                         50.33333333333333,
                                         51.166666666666664,
                                         52.,
                                         66.97222222222221,
                                         67.94444444444444,
                                         68.91666666666666,
                                         69.88888888888889,
                                         96.25,
                                         97.6111111111111,
                                         98.97222222222221,
                                         100.33333333333333,
                                         103.24999999999999,
                                         104.6111111111111,
                                         105.97222222222221,
                                         107.33333333333333,
                                         75.52777777777777,
                                         76.5,
                                         77.47222222222223,
                                         78.44444444444444,
                                         52.916666666666664,
                                         53.611111111111114,
                                         54.30555555555556,
                                         54.99999999999999,
                                         75.86111111111111,
                                         76.83333333333333,
                                         77.80555555555556,
                                         78.77777777777777,
                                         80.8611111111111,
                                         81.83333333333333,
                                         82.80555555555554,
                                         83.77777777777777,
                                         59.02777777777777,
                                         59.72222222222222,
                                         60.416666666666664,
                                         61.111111111111114};
  const std::array<int, 4> in_shape = {{1, 6, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         3.6666666666666665,
                                         4.,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333333,
                                         6.666666666666666,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         7.666666666666666,
                                         8.,
                                         4.666666666666666,
                                         4.888888888888889,
                                         5.111111111111111,
                                         5.333333333333333,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         5.555555555555555,
                                         5.777777777777777,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554};
  const std::array<int, 4> in_shape = {{1, 6, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.3611111111111107,
                                         3.7499999999999996,
                                         4.166666666666666,
                                         5.972222222222221,
                                         4.583333333333333,
                                         5.527777777777777,
                                         8.36111111111111,
                                         8.5,
                                         11.472222222222221,
                                         8.63888888888889,
                                         9.5,
                                         13.833333333333334,
                                         13.,
                                         16.5,
                                         12.166666666666664,
                                         13.666666666666666,
                                         19.666666666666664,
                                         18.,
                                         22.33333333333333,
                                         16.333333333333332,
                                         21.5,
                                         30.72222222222222,
                                         27.66666666666666,
                                         33.83333333333333,
                                         24.61111111111111,
                                         16.944444444444443,
                                         24.166666666666664,
                                         21.666666666666664,
                                         26.388888888888886,
                                         19.166666666666664};
  const std::array<int, 4> in_shape = {{1, 6, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         1.3333333333333333,
                                         2.9999999999999996,
                                         5.,
                                         3.6666666666666665,
                                         2.,
                                         2.333333333333333,
                                         5.,
                                         8.,
                                         5.666666666666666,
                                         3.,
                                         1.8888888888888888,
                                         4.,
                                         6.333333333333333,
                                         4.444444444444444,
                                         2.333333333333333,
                                         1.1111111111111112,
                                         2.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333};
  const std::array<int, 4> in_shape = {{1, 6, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         18.166666666666664,
                                         19.,
                                         26.5,
                                         27.666666666666668,
                                         25.,
                                         26.,
                                         31.833333333333332,
                                         33.,
                                         23.5,
                                         24.33333333333333,
                                         26.5,
                                         27.333333333333332,
                                         38.166666666666664,
                                         39.33333333333333,
                                         35.,
                                         36.,
                                         43.5,
                                         44.66666666666666,
                                         31.83333333333333,
                                         32.666666666666664,
                                         42.02777777777777,
                                         43.,
                                         60.08333333333332,
                                         61.44444444444444,
                                         54.166666666666664,
                                         55.33333333333332,
                                         66.30555555555554,
                                         67.66666666666666,
                                         48.25,
                                         49.22222222222222,
                                         33.19444444444444,
                                         33.888888888888886,
                                         47.36111111111111,
                                         48.33333333333333,
                                         42.5,
                                         43.33333333333333,
                                         51.80555555555555,
                                         52.77777777777777,
                                         37.638888888888886,
                                         38.33333333333333};
  const std::array<int, 4> in_shape = {{1, 6, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.999999999999999,
                                         9.,
                                         10.,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.6666666666666665,
                                         4.,
                                         4.333333333333334,
                                         4.666666666666666,
                                         9.333333333333332,
                                         10.,
                                         14.999999999999998,
                                         16.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         5.666666666666666,
                                         6.,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         7.5555555555555545,
                                         8.,
                                         11.999999999999998,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.888888888888888,
                                         4.444444444444445,
                                         4.666666666666666,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.444444444444445,
                                         4.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{1, 6, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         35.5,
                                         36.33333333333333,
                                         37.166666666666664,
                                         38.,
                                         51.83333333333333,
                                         53.,
                                         54.16666666666666,
                                         55.333333333333336,
                                         49.,
                                         50.,
                                         51.,
                                         52.,
                                         62.499999999999986,
                                         63.666666666666664,
                                         64.83333333333333,
                                         66.,
                                         46.16666666666666,
                                         47.,
                                         47.83333333333333,
                                         48.66666666666666,
                                         52.166666666666664,
                                         53.,
                                         53.83333333333333,
                                         54.666666666666664,
                                         75.16666666666666,
                                         76.33333333333333,
                                         77.5,
                                         78.66666666666666,
                                         68.99999999999999,
                                         70.,
                                         70.99999999999999,
                                         72.,
                                         85.83333333333331,
                                         87.,
                                         88.16666666666666,
                                         89.33333333333331,
                                         62.83333333333332,
                                         63.66666666666666,
                                         64.5,
                                         65.33333333333333,
                                         83.08333333333333,
                                         84.05555555555554,
                                         85.02777777777777,
                                         86.,
                                         118.80555555555554,
                                         120.16666666666664,
                                         121.52777777777777,
                                         122.88888888888889,
                                         107.16666666666664,
                                         108.33333333333333,
                                         109.5,
                                         110.66666666666664,
                                         131.25,
                                         132.6111111111111,
                                         133.97222222222223,
                                         135.33333333333331,
                                         95.52777777777777,
                                         96.5,
                                         97.47222222222223,
                                         98.44444444444444,
                                         65.69444444444444,
                                         66.38888888888889,
                                         67.08333333333333,
                                         67.77777777777777,
                                         93.75,
                                         94.72222222222221,
                                         95.69444444444444,
                                         96.66666666666666,
                                         84.16666666666666,
                                         85.,
                                         85.83333333333334,
                                         86.66666666666666,
                                         102.63888888888889,
                                         103.6111111111111,
                                         104.58333333333333,
                                         105.55555555555554,
                                         74.58333333333333,
                                         75.27777777777777,
                                         75.97222222222223,
                                         76.66666666666666};
  const std::array<int, 4> in_shape = {{1, 6, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         10.,
                                         10.666666666666668,
                                         11.333333333333334,
                                         11.999999999999998,
                                         17.,
                                         18.,
                                         19.,
                                         20.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333333,
                                         7.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         8.666666666666668,
                                         9.,
                                         9.333333333333332,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         20.,
                                         29.,
                                         29.999999999999996,
                                         30.999999999999996,
                                         32.,
                                         20.666666666666664,
                                         21.333333333333332,
                                         22.,
                                         22.666666666666664,
                                         11.,
                                         11.333333333333332,
                                         11.666666666666668,
                                         12.,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         14.666666666666666,
                                         15.111111111111109,
                                         15.555555555555557,
                                         16.,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         16.444444444444443,
                                         16.888888888888886,
                                         17.333333333333332,
                                         17.777777777777775,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{1, 6, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         11.166666666666664,
                                         16.166666666666664,
                                         14.999999999999998,
                                         16.,
                                         20.,
                                         14.666666666666666,
                                         16.166666666666664,
                                         23.166666666666668,
                                         21.,
                                         22.,
                                         27.,
                                         19.666666666666664,
                                         25.527777777777775,
                                         36.361111111111114,
                                         32.5,
                                         33.666666666666664,
                                         40.83333333333333,
                                         29.61111111111111,
                                         20.13888888888889,
                                         28.63888888888889,
                                         25.5,
                                         26.333333333333332,
                                         31.833333333333332,
                                         23.055555555555554};
  const std::array<int, 4> in_shape = {{1, 6, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         3.6666666666666665,
                                         6.,
                                         7.,
                                         4.999999999999999,
                                         2.6666666666666665,
                                         3.,
                                         6.333333333333333,
                                         9.999999999999998,
                                         11.,
                                         7.666666666666665,
                                         4.,
                                         2.4444444444444446,
                                         5.111111111111111,
                                         8.,
                                         8.666666666666664,
                                         5.999999999999999,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         5.,
                                         3.444444444444444,
                                         1.7777777777777777};
  const std::array<int, 4> in_shape = {{1, 6, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         21.499999999999996,
                                         22.33333333333333,
                                         31.166666666666664,
                                         32.33333333333333,
                                         29.,
                                         29.999999999999996,
                                         31.,
                                         32.,
                                         38.833333333333336,
                                         40.,
                                         28.499999999999996,
                                         29.333333333333332,
                                         31.499999999999993,
                                         32.33333333333333,
                                         45.16666666666666,
                                         46.333333333333336,
                                         41.,
                                         42.,
                                         43.,
                                         44.,
                                         52.83333333333333,
                                         54.,
                                         38.5,
                                         39.33333333333333,
                                         50.08333333333333,
                                         51.05555555555555,
                                         71.3611111111111,
                                         72.72222222222223,
                                         63.833333333333336,
                                         65.,
                                         66.16666666666666,
                                         67.33333333333333,
                                         80.30555555555554,
                                         81.66666666666666,
                                         58.25,
                                         59.22222222222222,
                                         39.58333333333333,
                                         40.27777777777778,
                                         56.30555555555556,
                                         57.27777777777778,
                                         50.166666666666664,
                                         51.,
                                         51.83333333333333,
                                         52.666666666666664,
                                         62.69444444444444,
                                         63.666666666666664,
                                         45.416666666666664,
                                         46.11111111111111};
  const std::array<int, 4> in_shape = {{1, 6, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         6.666666666666666,
                                         7.333333333333333,
                                         11.,
                                         12.,
                                         12.999999999999998,
                                         14.,
                                         9.333333333333332,
                                         9.999999999999998,
                                         5.,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         12.,
                                         12.666666666666666,
                                         19.,
                                         19.999999999999996,
                                         21.,
                                         22.,
                                         14.666666666666666,
                                         15.33333333333333,
                                         7.666666666666666,
                                         8.,
                                         4.666666666666666,
                                         4.888888888888889,
                                         9.777777777777779,
                                         10.222222222222221,
                                         15.333333333333332,
                                         16.,
                                         16.666666666666664,
                                         17.33333333333333,
                                         11.555555555555555,
                                         11.999999999999998,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         9.666666666666666,
                                         10.,
                                         6.666666666666666,
                                         6.888888888888888,
                                         3.444444444444444,
                                         3.5555555555555554};
  const std::array<int, 4> in_shape = {{1, 6, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME1x6x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         42.166666666666664,
                                         42.99999999999999,
                                         43.833333333333336,
                                         44.66666666666666,
                                         61.166666666666664,
                                         62.33333333333333,
                                         63.5,
                                         64.66666666666666,
                                         57.,
                                         58.,
                                         59.,
                                         59.99999999999999,
                                         60.99999999999999,
                                         62.,
                                         63.,
                                         64.,
                                         76.5,
                                         77.66666666666667,
                                         78.83333333333331,
                                         80.,
                                         56.166666666666664,
                                         56.99999999999999,
                                         57.83333333333333,
                                         58.666666666666664,
                                         62.166666666666664,
                                         62.999999999999986,
                                         63.83333333333333,
                                         64.66666666666666,
                                         89.16666666666667,
                                         90.33333333333331,
                                         91.49999999999999,
                                         92.66666666666667,
                                         81.,
                                         82.,
                                         82.99999999999999,
                                         84.,
                                         85.,
                                         86.,
                                         86.99999999999999,
                                         88.,
                                         104.5,
                                         105.66666666666666,
                                         106.83333333333331,
                                         108.,
                                         76.16666666666666,
                                         77.,
                                         77.83333333333333,
                                         78.66666666666666,
                                         99.19444444444444,
                                         100.16666666666666,
                                         101.13888888888889,
                                         102.1111111111111,
                                         141.3611111111111,
                                         142.7222222222222,
                                         144.08333333333334,
                                         145.44444444444446,
                                         126.5,
                                         127.66666666666667,
                                         128.83333333333331,
                                         130.,
                                         131.16666666666666,
                                         132.33333333333331,
                                         133.49999999999997,
                                         134.66666666666666,
                                         159.25,
                                         160.6111111111111,
                                         161.97222222222223,
                                         163.33333333333331,
                                         115.52777777777777,
                                         116.5,
                                         117.47222222222223,
                                         118.44444444444444,
                                         78.47222222222221,
                                         79.16666666666666,
                                         79.86111111111111,
                                         80.55555555555556,
                                         111.63888888888887,
                                         112.61111111111111,
                                         113.58333333333333,
                                         114.55555555555556,
                                         99.5,
                                         100.33333333333333,
                                         101.16666666666666,
                                         102.,
                                         102.83333333333333,
                                         103.66666666666666,
                                         104.5,
                                         105.33333333333333,
                                         124.41666666666666,
                                         125.38888888888889,
                                         126.36111111111111,
                                         127.33333333333333,
                                         90.13888888888889,
                                         90.83333333333333,
                                         91.52777777777777,
                                         92.22222222222221};
  const std::array<int, 4> in_shape = {{1, 6, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID1x6x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333334,
                                         6.666666666666667,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         21.,
                                         22.,
                                         23.,
                                         24.,
                                         25.,
                                         25.999999999999996,
                                         27.,
                                         28.,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         19.999999999999996,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333332,
                                         10.666666666666666,
                                         11.,
                                         11.333333333333332,
                                         11.666666666666666,
                                         12.,
                                         23.333333333333332,
                                         24.,
                                         24.666666666666668,
                                         25.333333333333332,
                                         37.,
                                         38.,
                                         39.,
                                         39.99999999999999,
                                         41.,
                                         42.,
                                         43.,
                                         44.,
                                         28.666666666666668,
                                         29.333333333333332,
                                         30.,
                                         30.66666666666666,
                                         15.,
                                         15.333333333333332,
                                         15.666666666666666,
                                         16.,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         19.11111111111111,
                                         19.555555555555557,
                                         20.,
                                         20.444444444444443,
                                         29.999999999999996,
                                         30.666666666666664,
                                         31.33333333333333,
                                         32.,
                                         32.666666666666664,
                                         33.33333333333333,
                                         34.,
                                         34.66666666666666,
                                         22.666666666666668,
                                         23.11111111111111,
                                         23.555555555555557,
                                         23.999999999999996,
                                         11.777777777777779,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666664,
                                         20.,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111};
  const std::array<int, 4> in_shape = {{1, 6, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.083333333333333,
                                         3.3611111111111107,
                                         4.611111111111111,
                                         3.6111111111111107,
                                         4.694444444444445,
                                         7.194444444444444,
                                         8.944444444444443,
                                         6.833333333333333,
                                         9.694444444444443,
                                         14.194444444444443,
                                         15.944444444444443,
                                         11.833333333333332,
                                         8.194444444444443,
                                         11.916666666666666,
                                         13.166666666666666,
                                         9.722222222222221,
                                         13.194444444444445,
                                         18.916666666666664,
                                         20.166666666666664,
                                         14.722222222222221,
                                         20.25,
                                         28.972222222222218,
                                         30.72222222222222,
                                         22.388888888888886,
                                         25.25,
                                         35.97222222222222,
                                         37.72222222222222,
                                         27.388888888888886,
                                         19.305555555555557,
                                         27.47222222222222,
                                         28.72222222222222,
                                         20.833333333333332,
                                         24.305555555555554,
                                         34.47222222222222,
                                         35.72222222222222,
                                         25.83333333333333,
                                         35.80555555555555,
                                         50.75,
                                         52.5,
                                         37.94444444444444,
                                         40.80555555555555,
                                         57.75,
                                         59.5,
                                         42.94444444444444,
                                         30.416666666666664,
                                         43.02777777777778,
                                         44.27777777777778,
                                         31.944444444444443};
  const std::array<int, 4> in_shape = {{3, 4, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {
      0.1111111111111111, 0.3333333333333333, 0.3333333333333333,
      0.2222222222222222, 0.4444444444444444, 1.1111111111111112,
      1.1111111111111112, 0.6666666666666666, 0.4444444444444444,
      1.1111111111111112, 1.1111111111111112, 0.6666666666666666,
      0.3333333333333333, 0.7777777777777777, 0.7777777777777777,
      0.4444444444444444, 0.5555555555555556, 1.2222222222222223,
      1.2222222222222223, 0.6666666666666666, 1.3333333333333333,
      2.888888888888889,  2.888888888888889,  1.5555555555555554,
      1.3333333333333333, 2.888888888888889,  2.888888888888889,
      1.5555555555555554, 0.7777777777777777, 1.6666666666666665,
      1.6666666666666665, 0.8888888888888888, 1.,
      2.111111111111111,  2.111111111111111,  1.1111111111111112,
      2.2222222222222223, 4.666666666666666,  4.666666666666666,
      2.4444444444444446, 2.2222222222222223, 4.666666666666666,
      4.666666666666666,  2.4444444444444446, 1.222222222222222,
      2.5555555555555554, 2.5555555555555554, 1.3333333333333333};
  const std::array<int, 4> in_shape = {{3, 4, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         18.416666666666664,
                                         19.388888888888886,
                                         27.027777777777775,
                                         28.388888888888886,
                                         30.527777777777775,
                                         31.888888888888886,
                                         22.694444444444443,
                                         23.666666666666664,
                                         15.694444444444445,
                                         16.388888888888886,
                                         22.86111111111111,
                                         23.833333333333332,
                                         25.36111111111111,
                                         26.333333333333332,
                                         18.75,
                                         19.444444444444443,
                                         25.694444444444443,
                                         26.38888888888889,
                                         36.861111111111114,
                                         37.83333333333333,
                                         39.361111111111114,
                                         40.33333333333333,
                                         28.749999999999996,
                                         29.444444444444443,
                                         39.52777777777777,
                                         40.5,
                                         56.58333333333333,
                                         57.944444444444436,
                                         60.08333333333333,
                                         61.44444444444444,
                                         43.80555555555555,
                                         44.77777777777777,
                                         49.52777777777777,
                                         50.5,
                                         70.58333333333333,
                                         71.94444444444444,
                                         74.08333333333334,
                                         75.44444444444444,
                                         53.80555555555555,
                                         54.77777777777777,
                                         37.916666666666664,
                                         38.611111111111114,
                                         53.97222222222222,
                                         54.94444444444444,
                                         56.47222222222222,
                                         57.44444444444444,
                                         40.97222222222222,
                                         41.666666666666664,
                                         47.91666666666666,
                                         48.61111111111111,
                                         67.97222222222221,
                                         68.94444444444444,
                                         70.47222222222223,
                                         71.44444444444444,
                                         50.97222222222222,
                                         51.66666666666666,
                                         70.63888888888889,
                                         71.6111111111111,
                                         100.13888888888887,
                                         101.5,
                                         103.6388888888889,
                                         105.,
                                         74.91666666666666,
                                         75.88888888888889,
                                         80.6388888888889,
                                         81.6111111111111,
                                         114.1388888888889,
                                         115.5,
                                         117.63888888888889,
                                         119.,
                                         84.91666666666666,
                                         85.88888888888889,
                                         60.138888888888886,
                                         60.83333333333333,
                                         85.08333333333333,
                                         86.05555555555556,
                                         87.58333333333333,
                                         88.55555555555556,
                                         63.19444444444444,
                                         63.888888888888886};
  const std::array<int, 4> in_shape = {{3, 4, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.777777777777778,
                                         5.333333333333334,
                                         5.777777777777778,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.777777777777778,
                                         5.333333333333334,
                                         5.777777777777778,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         4.,
                                         4.222222222222222,
                                         4.,
                                         4.222222222222222,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         8.88888888888889,
                                         9.333333333333332,
                                         4.666666666666666,
                                         4.888888888888889,
                                         4.222222222222221,
                                         4.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         8.88888888888889,
                                         9.333333333333332,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         4.888888888888888,
                                         5.111111111111111,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{3, 4, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         35.861111111111114,
                                         36.83333333333333,
                                         37.80555555555555,
                                         38.77777777777777,
                                         52.69444444444444,
                                         54.05555555555555,
                                         55.41666666666666,
                                         56.77777777777777,
                                         59.69444444444444,
                                         61.05555555555555,
                                         62.41666666666666,
                                         63.77777777777777,
                                         44.416666666666664,
                                         45.388888888888886,
                                         46.36111111111111,
                                         47.33333333333333,
                                         30.694444444444443,
                                         31.38888888888889,
                                         32.08333333333333,
                                         32.77777777777777,
                                         44.75,
                                         45.72222222222222,
                                         46.69444444444444,
                                         47.666666666666664,
                                         49.75,
                                         50.72222222222222,
                                         51.69444444444444,
                                         52.666666666666664,
                                         36.80555555555556,
                                         37.5,
                                         38.19444444444444,
                                         38.888888888888886,
                                         50.69444444444444,
                                         51.388888888888886,
                                         52.08333333333333,
                                         52.77777777777778,
                                         72.75,
                                         73.72222222222223,
                                         74.69444444444444,
                                         75.66666666666666,
                                         77.75,
                                         78.72222222222223,
                                         79.69444444444443,
                                         80.66666666666666,
                                         56.80555555555555,
                                         57.49999999999999,
                                         58.19444444444444,
                                         58.888888888888886,
                                         78.08333333333334,
                                         79.05555555555554,
                                         80.02777777777777,
                                         81.,
                                         111.80555555555556,
                                         113.16666666666666,
                                         114.52777777777777,
                                         115.88888888888887,
                                         118.80555555555557,
                                         120.16666666666666,
                                         121.52777777777776,
                                         122.88888888888889,
                                         86.63888888888889,
                                         87.6111111111111,
                                         88.58333333333333,
                                         89.55555555555554,
                                         98.08333333333333,
                                         99.05555555555554,
                                         100.02777777777777,
                                         101.,
                                         139.80555555555554,
                                         141.16666666666666,
                                         142.52777777777777,
                                         143.88888888888889,
                                         146.80555555555554,
                                         148.16666666666669,
                                         149.52777777777777,
                                         150.88888888888889,
                                         106.63888888888889,
                                         107.6111111111111,
                                         108.58333333333333,
                                         109.55555555555554,
                                         75.13888888888889,
                                         75.83333333333333,
                                         76.52777777777777,
                                         77.22222222222223,
                                         106.9722222222222,
                                         107.94444444444444,
                                         108.91666666666666,
                                         109.88888888888889,
                                         111.97222222222221,
                                         112.94444444444444,
                                         113.91666666666666,
                                         114.88888888888889,
                                         81.25,
                                         81.94444444444444,
                                         82.63888888888889,
                                         83.33333333333333,
                                         95.13888888888889,
                                         95.83333333333331,
                                         96.52777777777777,
                                         97.22222222222221,
                                         134.97222222222223,
                                         135.94444444444443,
                                         136.91666666666666,
                                         137.88888888888889,
                                         139.97222222222223,
                                         140.94444444444446,
                                         141.91666666666666,
                                         142.88888888888889,
                                         101.25,
                                         101.94444444444444,
                                         102.63888888888889,
                                         103.33333333333331,
                                         140.30555555555554,
                                         141.27777777777777,
                                         142.24999999999997,
                                         143.2222222222222,
                                         198.91666666666669,
                                         200.27777777777774,
                                         201.63888888888886,
                                         203.,
                                         205.91666666666669,
                                         207.2777777777778,
                                         208.63888888888886,
                                         210.,
                                         148.86111111111111,
                                         149.83333333333331,
                                         150.80555555555554,
                                         151.77777777777777,
                                         160.30555555555551,
                                         161.2777777777778,
                                         162.25,
                                         163.2222222222222,
                                         226.91666666666663,
                                         228.2777777777778,
                                         229.63888888888889,
                                         231.,
                                         233.91666666666666,
                                         235.27777777777777,
                                         236.63888888888889,
                                         238.,
                                         168.8611111111111,
                                         169.83333333333331,
                                         170.80555555555554,
                                         171.77777777777777,
                                         119.58333333333331,
                                         120.27777777777777,
                                         120.97222222222221,
                                         121.66666666666666,
                                         169.19444444444446,
                                         170.16666666666666,
                                         171.13888888888889,
                                         172.11111111111111,
                                         174.19444444444446,
                                         175.16666666666666,
                                         176.13888888888889,
                                         177.11111111111111,
                                         125.69444444444444,
                                         126.38888888888889,
                                         127.08333333333333,
                                         127.77777777777777};
  const std::array<int, 4> in_shape = {{3, 4, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         4.666666666666666,
                                         4.888888888888889,
                                         5.111111111111111,
                                         5.333333333333333,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         5.555555555555555,
                                         5.777777777777777,
                                         6.,
                                         6.222222222222221,
                                         4.666666666666666,
                                         4.888888888888889,
                                         5.111111111111111,
                                         5.333333333333333,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         5.555555555555555,
                                         5.777777777777777,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         4.555555555555555,
                                         4.666666666666666,
                                         4.777777777777778,
                                         4.888888888888888,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{3, 4, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.3611111111111107,
                                         3.7499999999999996,
                                         4.166666666666666,
                                         5.972222222222221,
                                         4.583333333333333,
                                         5.527777777777777,
                                         8.36111111111111,
                                         8.5,
                                         11.472222222222221,
                                         8.63888888888889,
                                         11.777777777777775,
                                         17.11111111111111,
                                         15.999999999999998,
                                         20.22222222222222,
                                         14.888888888888888,
                                         10.,
                                         14.444444444444443,
                                         13.333333333333332,
                                         16.666666666666664,
                                         12.222222222222221,
                                         16.25,
                                         23.194444444444443,
                                         20.833333333333332,
                                         25.416666666666664,
                                         18.47222222222222,
                                         24.97222222222222,
                                         35.58333333333333,
                                         31.833333333333332,
                                         38.69444444444444,
                                         28.083333333333332,
                                         31.22222222222222,
                                         44.333333333333336,
                                         39.333333333333336,
                                         47.44444444444444,
                                         34.33333333333333,
                                         23.888888888888886,
                                         33.888888888888886,
                                         29.999999999999996,
                                         36.111111111111114,
                                         26.11111111111111,
                                         30.138888888888886,
                                         42.638888888888886,
                                         37.5,
                                         44.861111111111114,
                                         32.36111111111111,
                                         44.416666666666664,
                                         62.80555555555555,
                                         55.166666666666664,
                                         65.91666666666667,
                                         47.52777777777777,
                                         50.66666666666667,
                                         71.55555555555556,
                                         62.66666666666667,
                                         74.66666666666666,
                                         53.77777777777777,
                                         37.77777777777778,
                                         53.333333333333336,
                                         46.66666666666666,
                                         55.55555555555556,
                                         40.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         0.4444444444444444,
                                         1.,
                                         1.6666666666666665,
                                         1.2222222222222223,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         2.6666666666666665,
                                         1.8888888888888888,
                                         1.,
                                         1.8888888888888888,
                                         4.,
                                         6.333333333333333,
                                         4.444444444444444,
                                         2.333333333333333,
                                         1.8888888888888888,
                                         4.,
                                         6.333333333333333,
                                         4.444444444444444,
                                         2.333333333333333,
                                         1.1111111111111112,
                                         2.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         3.222222222222222,
                                         1.6666666666666665,
                                         3.2222222222222223,
                                         6.666666666666666,
                                         10.333333333333332,
                                         7.111111111111111,
                                         3.6666666666666665,
                                         3.2222222222222223,
                                         6.666666666666666,
                                         10.333333333333332,
                                         7.111111111111111,
                                         3.6666666666666665,
                                         1.7777777777777777,
                                         3.6666666666666665,
                                         5.666666666666666,
                                         3.888888888888889,
                                         2.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         22.583333333333332,
                                         23.55555555555555,
                                         32.861111111111114,
                                         34.22222222222222,
                                         30.83333333333333,
                                         31.999999999999996,
                                         39.08333333333333,
                                         40.44444444444444,
                                         28.805555555555557,
                                         29.777777777777775,
                                         19.305555555555557,
                                         20.,
                                         27.916666666666664,
                                         28.888888888888886,
                                         25.83333333333333,
                                         26.666666666666664,
                                         32.36111111111111,
                                         33.33333333333333,
                                         23.75,
                                         24.444444444444443,
                                         31.805555555555554,
                                         32.5,
                                         45.41666666666666,
                                         46.388888888888886,
                                         40.833333333333336,
                                         41.666666666666664,
                                         49.861111111111114,
                                         50.83333333333333,
                                         36.25,
                                         36.94444444444444,
                                         48.97222222222222,
                                         49.94444444444444,
                                         69.80555555555554,
                                         71.16666666666666,
                                         62.5,
                                         63.666666666666664,
                                         76.02777777777779,
                                         77.38888888888889,
                                         55.19444444444444,
                                         56.166666666666664,
                                         61.47222222222222,
                                         62.44444444444444,
                                         87.30555555555556,
                                         88.66666666666667,
                                         77.49999999999999,
                                         78.66666666666667,
                                         93.52777777777777,
                                         94.88888888888889,
                                         67.69444444444444,
                                         68.66666666666666,
                                         47.08333333333333,
                                         47.77777777777777,
                                         66.80555555555554,
                                         67.77777777777777,
                                         59.16666666666666,
                                         59.99999999999999,
                                         71.25,
                                         72.22222222222223,
                                         51.52777777777777,
                                         52.22222222222222,
                                         59.58333333333333,
                                         60.27777777777777,
                                         84.30555555555554,
                                         85.27777777777777,
                                         74.16666666666666,
                                         75.,
                                         88.75,
                                         89.72222222222223,
                                         64.02777777777777,
                                         64.72222222222221,
                                         87.8611111111111,
                                         88.83333333333333,
                                         124.24999999999999,
                                         125.6111111111111,
                                         109.16666666666666,
                                         110.33333333333333,
                                         130.47222222222223,
                                         131.83333333333334,
                                         94.08333333333331,
                                         95.05555555555554,
                                         100.3611111111111,
                                         101.33333333333334,
                                         141.75,
                                         143.11111111111111,
                                         124.16666666666666,
                                         125.33333333333334,
                                         147.9722222222222,
                                         149.33333333333331,
                                         106.58333333333333,
                                         107.55555555555554,
                                         74.86111111111111,
                                         75.55555555555556,
                                         105.69444444444443,
                                         106.66666666666667,
                                         92.5,
                                         93.33333333333331,
                                         110.13888888888889,
                                         111.11111111111111,
                                         79.30555555555554,
                                         80.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.,
                                         3.,
                                         3.333333333333333,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         5.,
                                         5.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         7.5555555555555545,
                                         8.,
                                         11.999999999999998,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.888888888888888,
                                         4.444444444444445,
                                         4.666666666666666,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         7.5555555555555545,
                                         8.,
                                         11.999999999999998,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.888888888888888,
                                         4.444444444444445,
                                         4.666666666666666,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.444444444444445,
                                         4.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         6.222222222222221,
                                         6.444444444444444,
                                         3.222222222222222,
                                         3.333333333333333,
                                         6.222222222222221,
                                         6.444444444444445,
                                         12.888888888888888,
                                         13.333333333333332,
                                         20.,
                                         20.666666666666664,
                                         13.777777777777777,
                                         14.222222222222221,
                                         7.111111111111111,
                                         7.333333333333333,
                                         6.222222222222221,
                                         6.444444444444445,
                                         12.888888888888888,
                                         13.333333333333332,
                                         20.,
                                         20.666666666666664,
                                         13.777777777777777,
                                         14.222222222222221,
                                         7.111111111111111,
                                         7.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         7.111111111111111,
                                         7.333333333333333,
                                         11.,
                                         11.333333333333332,
                                         7.555555555555555,
                                         7.777777777777778,
                                         3.888888888888889,
                                         4.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         44.19444444444444,
                                         45.166666666666664,
                                         46.138888888888886,
                                         47.1111111111111,
                                         64.3611111111111,
                                         65.72222222222223,
                                         67.08333333333333,
                                         68.44444444444444,
                                         60.49999999999999,
                                         61.66666666666666,
                                         62.83333333333333,
                                         63.99999999999999,
                                         76.80555555555554,
                                         78.16666666666666,
                                         79.52777777777777,
                                         80.88888888888889,
                                         56.638888888888886,
                                         57.611111111111114,
                                         58.58333333333333,
                                         59.55555555555555,
                                         37.916666666666664,
                                         38.611111111111114,
                                         39.30555555555556,
                                         40.,
                                         54.8611111111111,
                                         55.83333333333333,
                                         56.80555555555556,
                                         57.77777777777777,
                                         50.83333333333333,
                                         51.66666666666666,
                                         52.5,
                                         53.33333333333333,
                                         63.74999999999999,
                                         64.72222222222221,
                                         65.69444444444444,
                                         66.66666666666666,
                                         46.80555555555556,
                                         47.5,
                                         48.19444444444444,
                                         48.888888888888886,
                                         62.916666666666664,
                                         63.61111111111111,
                                         64.30555555555556,
                                         65.,
                                         89.86111111111111,
                                         90.83333333333331,
                                         91.80555555555554,
                                         92.77777777777777,
                                         80.83333333333333,
                                         81.66666666666667,
                                         82.49999999999999,
                                         83.33333333333333,
                                         98.75,
                                         99.72222222222223,
                                         100.69444444444443,
                                         101.66666666666666,
                                         71.80555555555556,
                                         72.5,
                                         73.19444444444444,
                                         73.88888888888889,
                                         96.97222222222221,
                                         97.94444444444444,
                                         98.91666666666667,
                                         99.88888888888889,
                                         138.25,
                                         139.6111111111111,
                                         140.9722222222222,
                                         142.33333333333331,
                                         123.83333333333331,
                                         125.,
                                         126.16666666666666,
                                         127.33333333333333,
                                         150.69444444444443,
                                         152.05555555555557,
                                         153.41666666666666,
                                         154.77777777777777,
                                         109.41666666666666,
                                         110.38888888888889,
                                         111.36111111111111,
                                         112.33333333333333,
                                         121.9722222222222,
                                         122.94444444444444,
                                         123.91666666666666,
                                         124.88888888888889,
                                         173.25,
                                         174.61111111111111,
                                         175.9722222222222,
                                         177.33333333333334,
                                         153.83333333333334,
                                         154.99999999999997,
                                         156.16666666666669,
                                         157.33333333333334,
                                         185.69444444444443,
                                         187.05555555555554,
                                         188.41666666666666,
                                         189.77777777777777,
                                         134.41666666666669,
                                         135.38888888888889,
                                         136.3611111111111,
                                         137.33333333333331,
                                         93.4722222222222,
                                         94.16666666666666,
                                         94.86111111111111,
                                         95.55555555555554,
                                         132.63888888888889,
                                         133.6111111111111,
                                         134.58333333333334,
                                         135.55555555555554,
                                         117.49999999999999,
                                         118.33333333333331,
                                         119.16666666666664,
                                         119.99999999999999,
                                         141.52777777777777,
                                         142.5,
                                         143.47222222222223,
                                         144.44444444444446,
                                         102.36111111111111,
                                         103.05555555555554,
                                         103.75,
                                         104.44444444444444,
                                         118.47222222222221,
                                         119.16666666666666,
                                         119.8611111111111,
                                         120.55555555555554,
                                         167.63888888888886,
                                         168.6111111111111,
                                         169.58333333333334,
                                         170.55555555555554,
                                         147.5,
                                         148.33333333333331,
                                         149.16666666666666,
                                         150.,
                                         176.52777777777777,
                                         177.5,
                                         178.4722222222222,
                                         179.44444444444446,
                                         127.3611111111111,
                                         128.05555555555554,
                                         128.74999999999997,
                                         129.44444444444443,
                                         174.75,
                                         175.7222222222222,
                                         176.69444444444443,
                                         177.66666666666666,
                                         247.13888888888886,
                                         248.49999999999997,
                                         249.86111111111114,
                                         251.2222222222222,
                                         217.16666666666666,
                                         218.33333333333331,
                                         219.49999999999997,
                                         220.66666666666666,
                                         259.5833333333333,
                                         260.94444444444446,
                                         262.30555555555554,
                                         263.6666666666667,
                                         187.19444444444443,
                                         188.16666666666663,
                                         189.13888888888886,
                                         190.1111111111111,
                                         199.75,
                                         200.7222222222222,
                                         201.6944444444444,
                                         202.66666666666669,
                                         282.13888888888886,
                                         283.5,
                                         284.8611111111111,
                                         286.22222222222223,
                                         247.16666666666663,
                                         248.33333333333331,
                                         249.49999999999997,
                                         250.66666666666669,
                                         294.5833333333333,
                                         295.9444444444444,
                                         297.30555555555554,
                                         298.66666666666663,
                                         212.1944444444444,
                                         213.16666666666666,
                                         214.13888888888889,
                                         215.1111111111111,
                                         149.02777777777777,
                                         149.72222222222223,
                                         150.41666666666666,
                                         151.11111111111111,
                                         210.41666666666666,
                                         211.38888888888886,
                                         212.3611111111111,
                                         213.33333333333334,
                                         184.16666666666663,
                                         185.,
                                         185.83333333333331,
                                         186.66666666666663,
                                         219.30555555555554,
                                         220.27777777777777,
                                         221.25,
                                         222.22222222222223,
                                         157.91666666666666,
                                         158.6111111111111,
                                         159.30555555555554,
                                         160.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333333,
                                         6.666666666666666,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333334,
                                         10.666666666666666,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         14.666666666666666,
                                         15.111111111111109,
                                         15.555555555555557,
                                         16.,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         16.444444444444443,
                                         16.888888888888886,
                                         17.333333333333332,
                                         17.777777777777775,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         14.666666666666666,
                                         15.111111111111109,
                                         15.555555555555557,
                                         16.,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         16.444444444444443,
                                         16.888888888888886,
                                         17.333333333333332,
                                         17.777777777777775,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.888888888888888,
                                         6.333333333333333,
                                         6.444444444444444,
                                         6.555555555555555,
                                         6.666666666666666,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         26.22222222222222,
                                         26.666666666666664,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         27.111111111111107,
                                         27.555555555555554,
                                         28.,
                                         28.444444444444443,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         26.22222222222222,
                                         26.666666666666664,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         27.111111111111107,
                                         27.555555555555554,
                                         28.,
                                         28.444444444444443,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         21.666666666666664,
                                         22.,
                                         22.333333333333332,
                                         22.666666666666664,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         7.666666666666666,
                                         7.777777777777778,
                                         7.888888888888888,
                                         8.};
  const std::array<int, 4> in_shape = {{3, 4, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         13.86111111111111,
                                         20.027777777777775,
                                         18.5,
                                         19.666666666666664,
                                         24.5,
                                         17.944444444444443,
                                         11.805555555555554,
                                         16.97222222222222,
                                         15.499999999999998,
                                         16.333333333333332,
                                         20.166666666666664,
                                         14.722222222222221,
                                         19.305555555555554,
                                         27.472222222222225,
                                         24.5,
                                         25.333333333333336,
                                         30.666666666666668,
                                         22.22222222222222,
                                         29.694444444444443,
                                         42.19444444444445,
                                         37.5,
                                         38.66666666666667,
                                         46.66666666666667,
                                         33.77777777777778,
                                         37.19444444444444,
                                         52.69444444444444,
                                         46.49999999999999,
                                         47.66666666666667,
                                         57.166666666666664,
                                         41.27777777777777,
                                         28.47222222222222,
                                         40.30555555555556,
                                         35.5,
                                         36.333333333333336,
                                         43.5,
                                         31.38888888888889,
                                         35.97222222222222,
                                         50.80555555555556,
                                         44.5,
                                         45.33333333333333,
                                         54.,
                                         38.888888888888886,
                                         53.02777777777777,
                                         74.86111111111111,
                                         65.5,
                                         66.66666666666666,
                                         79.33333333333334,
                                         57.11111111111111,
                                         60.52777777777777,
                                         85.3611111111111,
                                         74.5,
                                         75.66666666666666,
                                         89.83333333333333,
                                         64.61111111111111,
                                         45.138888888888886,
                                         63.638888888888886,
                                         55.49999999999999,
                                         56.33333333333333,
                                         66.83333333333333,
                                         48.05555555555556};
  const std::array<int, 4> in_shape = {{3, 4, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         1.2222222222222223,
                                         2.,
                                         2.333333333333333,
                                         1.6666666666666665,
                                         0.8888888888888888,
                                         1.,
                                         2.111111111111111,
                                         3.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         2.4444444444444446,
                                         5.111111111111111,
                                         8.,
                                         8.666666666666664,
                                         5.999999999999999,
                                         3.1111111111111107,
                                         2.4444444444444446,
                                         5.111111111111111,
                                         8.,
                                         8.666666666666664,
                                         5.999999999999999,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         5.,
                                         3.444444444444444,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         3.888888888888889,
                                         6.,
                                         6.333333333333333,
                                         4.333333333333334,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         8.666666666666666,
                                         13.333333333333332,
                                         13.999999999999998,
                                         9.555555555555555,
                                         4.888888888888889,
                                         4.222222222222221,
                                         8.666666666666666,
                                         13.333333333333332,
                                         13.999999999999998,
                                         9.555555555555555,
                                         4.888888888888889,
                                         2.333333333333333,
                                         4.777777777777777,
                                         7.333333333333332,
                                         7.666666666666666,
                                         5.222222222222221,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{3, 4, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         26.75,
                                         27.72222222222222,
                                         38.69444444444444,
                                         40.05555555555555,
                                         35.83333333333333,
                                         37.,
                                         38.166666666666664,
                                         39.33333333333333,
                                         47.638888888888886,
                                         49.,
                                         34.916666666666664,
                                         35.888888888888886,
                                         22.916666666666664,
                                         23.611111111111107,
                                         32.97222222222222,
                                         33.94444444444444,
                                         30.166666666666664,
                                         30.999999999999996,
                                         31.83333333333333,
                                         32.666666666666664,
                                         39.36111111111111,
                                         40.33333333333333,
                                         28.75,
                                         29.444444444444443,
                                         37.916666666666664,
                                         38.61111111111111,
                                         53.97222222222222,
                                         54.94444444444445,
                                         48.166666666666664,
                                         49.,
                                         49.83333333333333,
                                         50.66666666666667,
                                         60.3611111111111,
                                         61.333333333333336,
                                         43.75,
                                         44.44444444444444,
                                         58.41666666666666,
                                         59.388888888888886,
                                         83.02777777777777,
                                         84.3888888888889,
                                         73.83333333333333,
                                         75.,
                                         76.16666666666666,
                                         77.33333333333334,
                                         91.9722222222222,
                                         93.33333333333334,
                                         66.58333333333333,
                                         67.55555555555556,
                                         73.41666666666666,
                                         74.38888888888889,
                                         104.02777777777777,
                                         105.38888888888889,
                                         91.83333333333333,
                                         92.99999999999999,
                                         94.16666666666667,
                                         95.33333333333334,
                                         112.97222222222223,
                                         114.33333333333333,
                                         81.58333333333333,
                                         82.55555555555554,
                                         56.25,
                                         56.94444444444444,
                                         79.63888888888889,
                                         80.61111111111111,
                                         70.16666666666667,
                                         71.,
                                         71.83333333333333,
                                         72.66666666666667,
                                         86.02777777777777,
                                         87.,
                                         62.08333333333333,
                                         62.77777777777778,
                                         71.25,
                                         71.94444444444444,
                                         100.63888888888889,
                                         101.61111111111111,
                                         88.16666666666666,
                                         89.,
                                         89.83333333333333,
                                         90.66666666666666,
                                         107.02777777777777,
                                         108.,
                                         77.08333333333333,
                                         77.77777777777777,
                                         105.08333333333333,
                                         106.05555555555554,
                                         148.3611111111111,
                                         149.72222222222223,
                                         129.83333333333331,
                                         131.,
                                         132.16666666666666,
                                         133.33333333333331,
                                         157.30555555555557,
                                         158.66666666666669,
                                         113.24999999999999,
                                         114.22222222222221,
                                         120.08333333333333,
                                         121.05555555555554,
                                         169.36111111111111,
                                         170.7222222222222,
                                         147.83333333333331,
                                         149.,
                                         150.16666666666666,
                                         151.33333333333331,
                                         178.30555555555554,
                                         179.66666666666666,
                                         128.25,
                                         129.22222222222223,
                                         89.58333333333333,
                                         90.27777777777777,
                                         126.30555555555554,
                                         127.27777777777777,
                                         110.16666666666666,
                                         110.99999999999999,
                                         111.83333333333331,
                                         112.66666666666666,
                                         132.69444444444443,
                                         133.66666666666666,
                                         95.41666666666666,
                                         96.11111111111111};
  const std::array<int, 4> in_shape = {{3, 4, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         1.,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         3.666666666666667,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         4.,
                                         4.222222222222222,
                                         6.333333333333333,
                                         6.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         4.666666666666666,
                                         4.888888888888889,
                                         9.777777777777779,
                                         10.222222222222221,
                                         15.333333333333332,
                                         16.,
                                         16.666666666666664,
                                         17.33333333333333,
                                         11.555555555555555,
                                         11.999999999999998,
                                         6.,
                                         6.222222222222221,
                                         4.666666666666666,
                                         4.888888888888889,
                                         9.777777777777779,
                                         10.222222222222221,
                                         15.333333333333332,
                                         16.,
                                         16.666666666666664,
                                         17.33333333333333,
                                         11.555555555555555,
                                         11.999999999999998,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         9.666666666666666,
                                         10.,
                                         6.666666666666666,
                                         6.888888888888888,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         7.555555555555555,
                                         7.777777777777778,
                                         11.666666666666666,
                                         12.,
                                         12.333333333333332,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.666666666666668,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.222222222222221,
                                         8.444444444444443,
                                         16.88888888888889,
                                         17.333333333333332,
                                         26.,
                                         26.666666666666664,
                                         27.333333333333332,
                                         27.999999999999996,
                                         18.666666666666664,
                                         19.11111111111111,
                                         9.555555555555555,
                                         9.777777777777779,
                                         8.222222222222221,
                                         8.444444444444443,
                                         16.88888888888889,
                                         17.333333333333332,
                                         26.,
                                         26.666666666666664,
                                         27.333333333333332,
                                         27.999999999999996,
                                         18.666666666666664,
                                         19.11111111111111,
                                         9.555555555555555,
                                         9.777777777777779,
                                         4.555555555555555,
                                         4.666666666666666,
                                         9.333333333333332,
                                         9.555555555555554,
                                         14.333333333333332,
                                         14.666666666666664,
                                         15.,
                                         15.333333333333332,
                                         10.222222222222221,
                                         10.444444444444443,
                                         5.222222222222222,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{3, 4, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x4x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         52.52777777777777,
                                         53.5,
                                         54.47222222222222,
                                         55.44444444444444,
                                         76.02777777777777,
                                         77.38888888888889,
                                         78.75,
                                         80.1111111111111,
                                         70.5,
                                         71.66666666666666,
                                         72.83333333333333,
                                         74.,
                                         75.16666666666666,
                                         76.33333333333333,
                                         77.5,
                                         78.66666666666666,
                                         93.91666666666666,
                                         95.27777777777777,
                                         96.63888888888889,
                                         98.,
                                         68.86111111111111,
                                         69.83333333333333,
                                         70.80555555555554,
                                         71.77777777777777,
                                         45.138888888888886,
                                         45.83333333333333,
                                         46.52777777777778,
                                         47.222222222222214,
                                         64.97222222222221,
                                         65.94444444444444,
                                         66.91666666666666,
                                         67.88888888888889,
                                         59.49999999999999,
                                         60.33333333333333,
                                         61.16666666666666,
                                         61.99999999999999,
                                         62.83333333333333,
                                         63.66666666666666,
                                         64.5,
                                         65.33333333333333,
                                         77.75,
                                         78.72222222222221,
                                         79.69444444444443,
                                         80.66666666666666,
                                         56.80555555555556,
                                         57.5,
                                         58.19444444444444,
                                         58.888888888888886,
                                         75.13888888888889,
                                         75.83333333333333,
                                         76.52777777777777,
                                         77.22222222222221,
                                         106.97222222222221,
                                         107.94444444444444,
                                         108.91666666666667,
                                         109.8888888888889,
                                         95.49999999999999,
                                         96.33333333333333,
                                         97.16666666666667,
                                         98.,
                                         98.83333333333331,
                                         99.66666666666666,
                                         100.49999999999999,
                                         101.33333333333334,
                                         119.75,
                                         120.7222222222222,
                                         121.69444444444443,
                                         122.66666666666667,
                                         86.80555555555554,
                                         87.5,
                                         88.19444444444444,
                                         88.88888888888889,
                                         115.8611111111111,
                                         116.83333333333331,
                                         117.80555555555554,
                                         118.77777777777777,
                                         164.69444444444443,
                                         166.05555555555554,
                                         167.41666666666669,
                                         168.7777777777778,
                                         146.5,
                                         147.66666666666666,
                                         148.83333333333334,
                                         150.,
                                         151.16666666666666,
                                         152.33333333333331,
                                         153.49999999999997,
                                         154.66666666666669,
                                         182.58333333333334,
                                         183.9444444444444,
                                         185.30555555555554,
                                         186.66666666666669,
                                         132.19444444444443,
                                         133.16666666666666,
                                         134.13888888888889,
                                         135.11111111111111,
                                         145.86111111111111,
                                         146.83333333333331,
                                         147.80555555555554,
                                         148.77777777777777,
                                         206.69444444444443,
                                         208.05555555555554,
                                         209.41666666666669,
                                         210.77777777777777,
                                         182.49999999999997,
                                         183.66666666666666,
                                         184.83333333333331,
                                         185.99999999999997,
                                         187.16666666666666,
                                         188.33333333333334,
                                         189.49999999999997,
                                         190.66666666666669,
                                         224.58333333333334,
                                         225.94444444444446,
                                         227.30555555555551,
                                         228.66666666666666,
                                         162.19444444444446,
                                         163.16666666666666,
                                         164.13888888888889,
                                         165.1111111111111,
                                         111.80555555555554,
                                         112.5,
                                         113.19444444444443,
                                         113.88888888888889,
                                         158.30555555555554,
                                         159.27777777777777,
                                         160.25,
                                         161.22222222222223,
                                         139.5,
                                         140.33333333333334,
                                         141.16666666666666,
                                         142.,
                                         142.83333333333334,
                                         143.66666666666666,
                                         144.5,
                                         145.33333333333334,
                                         171.08333333333331,
                                         172.05555555555554,
                                         173.02777777777777,
                                         174.,
                                         123.47222222222221,
                                         124.16666666666666,
                                         124.86111111111111,
                                         125.55555555555556,
                                         141.80555555555554,
                                         142.5,
                                         143.19444444444443,
                                         143.88888888888889,
                                         200.30555555555554,
                                         201.27777777777777,
                                         202.25,
                                         203.22222222222223,
                                         175.5,
                                         176.33333333333331,
                                         177.16666666666666,
                                         178.,
                                         178.83333333333331,
                                         179.66666666666666,
                                         180.5,
                                         181.33333333333331,
                                         213.08333333333334,
                                         214.05555555555554,
                                         215.02777777777777,
                                         216.,
                                         153.47222222222223,
                                         154.16666666666666,
                                         154.8611111111111,
                                         155.55555555555554,
                                         209.19444444444443,
                                         210.16666666666666,
                                         211.13888888888886,
                                         212.1111111111111,
                                         295.3611111111111,
                                         296.7222222222222,
                                         298.08333333333337,
                                         299.44444444444446,
                                         258.5,
                                         259.66666666666663,
                                         260.8333333333333,
                                         262.,
                                         263.16666666666663,
                                         264.3333333333333,
                                         265.5,
                                         266.66666666666663,
                                         313.25,
                                         314.61111111111114,
                                         315.97222222222223,
                                         317.33333333333337,
                                         225.52777777777777,
                                         226.49999999999997,
                                         227.47222222222217,
                                         228.44444444444443,
                                         239.19444444444446,
                                         240.16666666666666,
                                         241.13888888888889,
                                         242.1111111111111,
                                         337.3611111111111,
                                         338.72222222222223,
                                         340.0833333333333,
                                         341.4444444444444,
                                         294.5,
                                         295.66666666666663,
                                         296.8333333333333,
                                         298.,
                                         299.16666666666663,
                                         300.3333333333333,
                                         301.5,
                                         302.66666666666663,
                                         355.25,
                                         356.6111111111111,
                                         357.97222222222223,
                                         359.3333333333333,
                                         255.52777777777777,
                                         256.5,
                                         257.4722222222222,
                                         258.44444444444446,
                                         178.47222222222223,
                                         179.16666666666666,
                                         179.86111111111111,
                                         180.55555555555554,
                                         251.63888888888886,
                                         252.6111111111111,
                                         253.58333333333331,
                                         254.55555555555554,
                                         219.49999999999997,
                                         220.33333333333331,
                                         221.16666666666663,
                                         221.99999999999997,
                                         222.83333333333331,
                                         223.66666666666663,
                                         224.49999999999997,
                                         225.33333333333331,
                                         264.41666666666663,
                                         265.38888888888886,
                                         266.3611111111111,
                                         267.3333333333333,
                                         190.13888888888889,
                                         190.83333333333331,
                                         191.52777777777777,
                                         192.22222222222223};
  const std::array<int, 4> in_shape = {{3, 4, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x4x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         6.999999999999999,
                                         7.333333333333334,
                                         7.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         8.666666666666666,
                                         9.,
                                         9.333333333333332,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         12.333333333333332,
                                         12.666666666666666,
                                         13.,
                                         13.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         19.11111111111111,
                                         19.555555555555557,
                                         20.,
                                         20.444444444444443,
                                         29.999999999999996,
                                         30.666666666666664,
                                         31.33333333333333,
                                         32.,
                                         32.666666666666664,
                                         33.33333333333333,
                                         34.,
                                         34.66666666666666,
                                         22.666666666666668,
                                         23.11111111111111,
                                         23.555555555555557,
                                         23.999999999999996,
                                         11.777777777777779,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         19.11111111111111,
                                         19.555555555555557,
                                         20.,
                                         20.444444444444443,
                                         29.999999999999996,
                                         30.666666666666664,
                                         31.33333333333333,
                                         32.,
                                         32.666666666666664,
                                         33.33333333333333,
                                         34.,
                                         34.66666666666666,
                                         22.666666666666668,
                                         23.11111111111111,
                                         23.555555555555557,
                                         23.999999999999996,
                                         11.777777777777779,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666664,
                                         20.,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         7.444444444444444,
                                         7.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         23.,
                                         23.333333333333332,
                                         23.666666666666664,
                                         24.,
                                         24.333333333333332,
                                         24.666666666666664,
                                         25.,
                                         25.333333333333332,
                                         16.666666666666664,
                                         16.888888888888886,
                                         17.111111111111107,
                                         17.333333333333336,
                                         8.555555555555555,
                                         8.666666666666666,
                                         8.777777777777777,
                                         8.88888888888889,
                                         16.22222222222222,
                                         16.444444444444443,
                                         16.666666666666664,
                                         16.888888888888886,
                                         33.33333333333333,
                                         33.77777777777778,
                                         34.22222222222222,
                                         34.666666666666664,
                                         51.33333333333333,
                                         52.,
                                         52.66666666666666,
                                         53.33333333333333,
                                         54.,
                                         54.666666666666664,
                                         55.33333333333333,
                                         55.99999999999999,
                                         36.888888888888886,
                                         37.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         18.888888888888886,
                                         19.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         16.22222222222222,
                                         16.444444444444443,
                                         16.666666666666664,
                                         16.888888888888886,
                                         33.33333333333333,
                                         33.77777777777778,
                                         34.22222222222222,
                                         34.666666666666664,
                                         51.33333333333333,
                                         52.,
                                         52.66666666666666,
                                         53.33333333333333,
                                         54.,
                                         54.666666666666664,
                                         55.33333333333333,
                                         55.99999999999999,
                                         36.888888888888886,
                                         37.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         18.888888888888886,
                                         19.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         9.,
                                         9.11111111111111,
                                         9.222222222222221,
                                         9.333333333333332,
                                         18.444444444444443,
                                         18.666666666666664,
                                         18.888888888888886,
                                         19.111111111111107,
                                         28.33333333333333,
                                         28.666666666666664,
                                         28.999999999999996,
                                         29.33333333333333,
                                         29.666666666666664,
                                         30.,
                                         30.333333333333336,
                                         30.666666666666664,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         10.333333333333332,
                                         10.444444444444445,
                                         10.555555555555555,
                                         10.666666666666666};
  const std::array<int, 4> in_shape = {{3, 4, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.083333333333333,
                                         3.3611111111111107,
                                         4.611111111111111,
                                         3.6111111111111107,
                                         4.694444444444445,
                                         7.194444444444444,
                                         8.944444444444443,
                                         6.833333333333333,
                                         7.833333333333332,
                                         11.5,
                                         12.999999999999998,
                                         9.666666666666666,
                                         13.583333333333332,
                                         19.63888888888889,
                                         21.38888888888889,
                                         15.722222222222221,
                                         10.972222222222221,
                                         15.805555555555555,
                                         17.055555555555557,
                                         12.5,
                                         15.972222222222221,
                                         22.805555555555554,
                                         24.055555555555557,
                                         17.5,
                                         24.138888888888886,
                                         34.416666666666664,
                                         36.166666666666664,
                                         26.277777777777775,
                                         24.5,
                                         34.83333333333333,
                                         36.33333333333333,
                                         26.333333333333332,
                                         33.02777777777778,
                                         46.861111111111114,
                                         48.611111111111114,
                                         35.166666666666664,
                                         24.86111111111111,
                                         35.25,
                                         36.5,
                                         26.38888888888889,
                                         29.86111111111111,
                                         42.24999999999999,
                                         43.5,
                                         31.388888888888886,
                                         43.583333333333336,
                                         61.63888888888888,
                                         63.388888888888886,
                                         45.722222222222214,
                                         41.16666666666667,
                                         58.16666666666667,
                                         59.66666666666666,
                                         42.999999999999986,
                                         52.47222222222222,
                                         74.08333333333333,
                                         75.83333333333333,
                                         54.61111111111111,
                                         38.75,
                                         54.69444444444444,
                                         55.94444444444444,
                                         40.27777777777777};
  const std::array<int, 4> in_shape = {{3, 5, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.3333333333333333,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         1.1111111111111112,
                                         1.1111111111111112,
                                         0.6666666666666666,
                                         1.,
                                         2.3333333333333335,
                                         2.3333333333333335,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         2.,
                                         2.,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         1.2222222222222223,
                                         1.2222222222222223,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         1.6666666666666665,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         3.7777777777777777,
                                         3.7777777777777777,
                                         2.,
                                         3.,
                                         6.333333333333333,
                                         6.333333333333333,
                                         3.333333333333333,
                                         2.2222222222222223,
                                         4.666666666666666,
                                         4.666666666666666,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         2.5555555555555554,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         3.,
                                         3.,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         6.444444444444444,
                                         6.444444444444444,
                                         3.333333333333333,
                                         5.,
                                         10.333333333333332,
                                         10.333333333333332,
                                         5.333333333333333,
                                         3.5555555555555554,
                                         7.333333333333333,
                                         7.333333333333333,
                                         3.7777777777777777,
                                         1.8888888888888888,
                                         3.888888888888889,
                                         3.888888888888889,
                                         2.};
  const std::array<int, 4> in_shape = {{3, 5, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         14.833333333333332,
                                         15.666666666666664,
                                         21.83333333333333,
                                         23.,
                                         24.83333333333333,
                                         25.999999999999996,
                                         18.5,
                                         19.333333333333332,
                                         26.194444444444443,
                                         27.166666666666664,
                                         37.916666666666664,
                                         39.27777777777778,
                                         41.416666666666664,
                                         42.77777777777778,
                                         30.47222222222222,
                                         31.444444444444443,
                                         21.25,
                                         21.944444444444443,
                                         30.638888888888886,
                                         31.61111111111111,
                                         33.138888888888886,
                                         34.111111111111114,
                                         24.305555555555554,
                                         25.,
                                         31.249999999999993,
                                         31.944444444444443,
                                         44.63888888888888,
                                         45.61111111111111,
                                         47.13888888888888,
                                         48.111111111111114,
                                         34.30555555555556,
                                         35.,
                                         47.30555555555555,
                                         48.27777777777777,
                                         67.47222222222221,
                                         68.83333333333333,
                                         70.97222222222221,
                                         72.33333333333333,
                                         51.583333333333336,
                                         52.55555555555555,
                                         48.16666666666666,
                                         49.,
                                         68.5,
                                         69.66666666666666,
                                         71.5,
                                         72.66666666666666,
                                         51.83333333333333,
                                         52.666666666666664,
                                         65.08333333333334,
                                         66.05555555555556,
                                         92.3611111111111,
                                         93.72222222222223,
                                         95.8611111111111,
                                         97.22222222222223,
                                         69.3611111111111,
                                         70.33333333333333,
                                         49.02777777777777,
                                         49.72222222222222,
                                         69.52777777777777,
                                         70.5,
                                         72.02777777777777,
                                         73.,
                                         52.08333333333333,
                                         52.77777777777778,
                                         59.02777777777777,
                                         59.72222222222222,
                                         83.52777777777777,
                                         84.49999999999999,
                                         86.02777777777777,
                                         87.,
                                         62.08333333333333,
                                         62.77777777777777,
                                         86.19444444444443,
                                         87.16666666666667,
                                         121.91666666666666,
                                         123.27777777777776,
                                         125.41666666666666,
                                         126.77777777777777,
                                         90.4722222222222,
                                         91.44444444444443,
                                         81.5,
                                         82.33333333333334,
                                         115.16666666666666,
                                         116.33333333333334,
                                         118.16666666666666,
                                         119.33333333333331,
                                         85.16666666666666,
                                         85.99999999999997,
                                         103.9722222222222,
                                         104.94444444444444,
                                         146.80555555555554,
                                         148.16666666666666,
                                         150.30555555555554,
                                         151.66666666666666,
                                         108.25,
                                         109.22222222222221,
                                         76.80555555555554,
                                         77.5,
                                         108.41666666666666,
                                         109.38888888888889,
                                         110.91666666666666,
                                         111.88888888888889,
                                         79.86111111111111,
                                         80.55555555555554};
  const std::array<int, 4> in_shape = {{3, 5, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         4.,
                                         4.666666666666667,
                                         4.,
                                         4.666666666666667,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         3.5555555555555554,
                                         4.,
                                         3.5555555555555554,
                                         4.,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         7.111111111111111,
                                         7.555555555555555,
                                         7.111111111111111,
                                         7.555555555555555,
                                         3.7777777777777777,
                                         4.,
                                         5.666666666666666,
                                         6.,
                                         11.999999999999998,
                                         12.666666666666666,
                                         11.999999999999998,
                                         12.666666666666666,
                                         6.333333333333333,
                                         6.666666666666666,
                                         4.222222222222221,
                                         4.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         8.88888888888889,
                                         9.333333333333332,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         4.888888888888888,
                                         5.111111111111111,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         5.777777777777778,
                                         6.,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         12.444444444444445,
                                         12.888888888888888,
                                         12.444444444444445,
                                         12.888888888888888,
                                         6.444444444444445,
                                         6.666666666666666,
                                         9.666666666666666,
                                         10.,
                                         20.,
                                         20.666666666666664,
                                         20.,
                                         20.666666666666664,
                                         10.333333333333334,
                                         10.666666666666666,
                                         6.888888888888888,
                                         7.111111111111111,
                                         14.222222222222221,
                                         14.666666666666666,
                                         14.222222222222221,
                                         14.666666666666666,
                                         7.333333333333333,
                                         7.555555555555555,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         7.555555555555555,
                                         7.777777777777778,
                                         7.555555555555555,
                                         7.777777777777778,
                                         3.888888888888889,
                                         4.};
  const std::array<int, 4> in_shape = {{3, 5, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         28.833333333333332,
                                         29.666666666666664,
                                         30.499999999999996,
                                         31.33333333333333,
                                         42.49999999999999,
                                         43.66666666666666,
                                         44.83333333333333,
                                         46.,
                                         48.49999999999999,
                                         49.66666666666666,
                                         50.83333333333333,
                                         51.99999999999999,
                                         36.166666666666664,
                                         37.,
                                         37.83333333333333,
                                         38.666666666666664,
                                         51.41666666666667,
                                         52.388888888888886,
                                         53.3611111111111,
                                         54.33333333333333,
                                         74.47222222222223,
                                         75.83333333333333,
                                         77.19444444444444,
                                         78.55555555555556,
                                         81.47222222222221,
                                         82.83333333333333,
                                         84.19444444444444,
                                         85.55555555555556,
                                         59.97222222222222,
                                         60.94444444444444,
                                         61.916666666666664,
                                         62.888888888888886,
                                         41.80555555555556,
                                         42.5,
                                         43.19444444444444,
                                         43.888888888888886,
                                         60.30555555555555,
                                         61.27777777777777,
                                         62.25,
                                         63.22222222222222,
                                         65.30555555555554,
                                         66.27777777777777,
                                         67.25,
                                         68.22222222222223,
                                         47.916666666666664,
                                         48.61111111111111,
                                         49.30555555555556,
                                         50.,
                                         61.80555555555555,
                                         62.499999999999986,
                                         63.19444444444444,
                                         63.888888888888886,
                                         88.30555555555556,
                                         89.27777777777776,
                                         90.24999999999999,
                                         91.22222222222221,
                                         93.30555555555554,
                                         94.27777777777776,
                                         95.25,
                                         96.22222222222223,
                                         67.91666666666666,
                                         68.61111111111111,
                                         69.30555555555554,
                                         70.,
                                         93.63888888888889,
                                         94.6111111111111,
                                         95.58333333333334,
                                         96.55555555555554,
                                         133.58333333333331,
                                         134.94444444444443,
                                         136.30555555555554,
                                         137.66666666666666,
                                         140.58333333333331,
                                         141.94444444444443,
                                         143.30555555555557,
                                         144.66666666666666,
                                         102.19444444444443,
                                         103.16666666666667,
                                         104.13888888888889,
                                         105.1111111111111,
                                         95.49999999999999,
                                         96.33333333333331,
                                         97.16666666666666,
                                         98.,
                                         135.83333333333331,
                                         137.,
                                         138.16666666666666,
                                         139.33333333333331,
                                         141.83333333333331,
                                         143.,
                                         144.16666666666666,
                                         145.33333333333331,
                                         102.83333333333331,
                                         103.66666666666666,
                                         104.49999999999999,
                                         105.33333333333333,
                                         129.19444444444443,
                                         130.16666666666669,
                                         131.13888888888889,
                                         132.11111111111111,
                                         183.36111111111111,
                                         184.7222222222222,
                                         186.08333333333331,
                                         187.44444444444446,
                                         190.3611111111111,
                                         191.7222222222222,
                                         193.08333333333334,
                                         194.44444444444446,
                                         137.75,
                                         138.7222222222222,
                                         139.69444444444443,
                                         140.66666666666666,
                                         97.3611111111111,
                                         98.05555555555554,
                                         98.75,
                                         99.44444444444444,
                                         138.08333333333331,
                                         139.05555555555554,
                                         140.02777777777777,
                                         141.,
                                         143.08333333333331,
                                         144.05555555555554,
                                         145.02777777777777,
                                         146.,
                                         103.47222222222223,
                                         104.16666666666666,
                                         104.8611111111111,
                                         105.55555555555556,
                                         117.36111111111111,
                                         118.05555555555554,
                                         118.74999999999999,
                                         119.44444444444444,
                                         166.08333333333331,
                                         167.05555555555554,
                                         168.02777777777777,
                                         168.99999999999997,
                                         171.08333333333331,
                                         172.05555555555554,
                                         173.02777777777777,
                                         174.,
                                         123.47222222222221,
                                         124.16666666666666,
                                         124.8611111111111,
                                         125.55555555555554,
                                         171.41666666666666,
                                         172.38888888888886,
                                         173.36111111111111,
                                         174.33333333333334,
                                         242.4722222222222,
                                         243.83333333333331,
                                         245.19444444444443,
                                         246.55555555555551,
                                         249.4722222222222,
                                         250.83333333333331,
                                         252.19444444444443,
                                         253.55555555555554,
                                         179.9722222222222,
                                         180.9444444444444,
                                         181.91666666666666,
                                         182.88888888888886,
                                         162.16666666666666,
                                         163.,
                                         163.83333333333331,
                                         164.66666666666669,
                                         229.16666666666669,
                                         230.33333333333331,
                                         231.5,
                                         232.66666666666669,
                                         235.16666666666663,
                                         236.33333333333331,
                                         237.5,
                                         238.66666666666663,
                                         169.5,
                                         170.33333333333331,
                                         171.16666666666666,
                                         171.99999999999994,
                                         206.9722222222222,
                                         207.9444444444444,
                                         208.91666666666666,
                                         209.88888888888889,
                                         292.25,
                                         293.6111111111111,
                                         294.97222222222223,
                                         296.3333333333333,
                                         299.25,
                                         300.6111111111111,
                                         301.9722222222222,
                                         303.3333333333333,
                                         215.52777777777777,
                                         216.5,
                                         217.4722222222222,
                                         218.44444444444443,
                                         152.91666666666666,
                                         153.6111111111111,
                                         154.30555555555554,
                                         155.,
                                         215.8611111111111,
                                         216.83333333333331,
                                         217.80555555555554,
                                         218.77777777777777,
                                         220.8611111111111,
                                         221.83333333333331,
                                         222.80555555555554,
                                         223.77777777777777,
                                         159.02777777777777,
                                         159.72222222222223,
                                         160.41666666666666,
                                         161.1111111111111};
  const std::array<int, 4> in_shape = {{3, 5, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         3.6666666666666665,
                                         4.,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         2.888888888888889,
                                         3.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         6.666666666666667,
                                         7.111111111111111,
                                         7.555555555555555,
                                         8.,
                                         6.666666666666667,
                                         7.111111111111111,
                                         7.555555555555555,
                                         8.,
                                         3.7777777777777777,
                                         3.9999999999999996,
                                         4.222222222222221,
                                         4.444444444444445,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         4.222222222222221,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888889,
                                         2.333333333333333,
                                         2.444444444444444,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         6.444444444444445,
                                         6.666666666666666,
                                         6.888888888888889,
                                         7.111111111111111,
                                         13.777777777777777,
                                         14.222222222222221,
                                         14.666666666666668,
                                         15.11111111111111,
                                         13.777777777777777,
                                         14.222222222222221,
                                         14.666666666666668,
                                         15.11111111111111,
                                         7.333333333333332,
                                         7.555555555555555,
                                         7.777777777777777,
                                         8.,
                                         11.,
                                         11.333333333333332,
                                         11.666666666666668,
                                         12.,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         12.333333333333332,
                                         12.666666666666666,
                                         13.,
                                         13.333333333333332,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         4.555555555555555,
                                         4.666666666666666,
                                         4.777777777777778,
                                         4.888888888888888,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         5.888888888888888,
                                         6.,
                                         6.111111111111111,
                                         6.222222222222221,
                                         11.777777777777777,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         24.444444444444443,
                                         24.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         24.444444444444443,
                                         24.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         12.666666666666666,
                                         12.88888888888889,
                                         13.11111111111111,
                                         13.333333333333332,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666664,
                                         20.,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         20.333333333333332,
                                         20.666666666666668,
                                         21.,
                                         21.333333333333332,
                                         13.555555555555554,
                                         13.777777777777777,
                                         14.,
                                         14.222222222222221,
                                         28.,
                                         28.444444444444443,
                                         28.88888888888889,
                                         29.333333333333332,
                                         28.,
                                         28.444444444444443,
                                         28.88888888888889,
                                         29.333333333333332,
                                         14.444444444444443,
                                         14.666666666666666,
                                         14.88888888888889,
                                         15.11111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         7.444444444444444,
                                         7.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         7.666666666666666,
                                         7.777777777777778,
                                         7.888888888888888,
                                         8.};
  const std::array<int, 4> in_shape = {{3, 5, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.3611111111111107,
                                         3.7499999999999996,
                                         4.166666666666666,
                                         5.972222222222221,
                                         4.583333333333333,
                                         5.527777777777777,
                                         8.36111111111111,
                                         8.5,
                                         11.472222222222221,
                                         8.63888888888889,
                                         9.5,
                                         13.833333333333334,
                                         13.,
                                         16.5,
                                         12.166666666666664,
                                         16.63888888888889,
                                         23.916666666666664,
                                         21.833333333333332,
                                         27.027777777777775,
                                         19.75,
                                         13.472222222222221,
                                         19.305555555555554,
                                         17.5,
                                         21.52777777777778,
                                         15.694444444444445,
                                         19.72222222222222,
                                         28.055555555555554,
                                         25.000000000000004,
                                         30.27777777777778,
                                         21.944444444444443,
                                         29.833333333333332,
                                         42.38888888888889,
                                         37.66666666666667,
                                         45.5,
                                         32.94444444444444,
                                         30.33333333333333,
                                         42.99999999999999,
                                         37.99999999999999,
                                         45.666666666666664,
                                         33.,
                                         40.94444444444444,
                                         57.94444444444444,
                                         50.99999999999999,
                                         61.05555555555555,
                                         44.05555555555556,
                                         30.833333333333332,
                                         43.611111111111114,
                                         38.33333333333333,
                                         45.83333333333333,
                                         33.05555555555556,
                                         37.08333333333333,
                                         52.36111111111111,
                                         45.833333333333336,
                                         54.583333333333336,
                                         39.30555555555556,
                                         54.13888888888888,
                                         76.41666666666666,
                                         66.83333333333333,
                                         79.52777777777777,
                                         57.25,
                                         51.16666666666666,
                                         72.16666666666666,
                                         62.99999999999999,
                                         74.83333333333333,
                                         53.83333333333333,
                                         65.25,
                                         91.97222222222223,
                                         80.16666666666666,
                                         95.08333333333333,
                                         68.3611111111111,
                                         48.19444444444444,
                                         67.91666666666667,
                                         59.16666666666666,
                                         70.13888888888889,
                                         50.416666666666664};
  const std::array<int, 4> in_shape = {{3, 5, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         1.3333333333333333,
                                         2.9999999999999996,
                                         5.,
                                         3.6666666666666665,
                                         2.,
                                         1.222222222222222,
                                         2.6666666666666665,
                                         4.333333333333333,
                                         3.111111111111111,
                                         1.6666666666666665,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         2.6666666666666665,
                                         1.8888888888888888,
                                         1.,
                                         1.1111111111111112,
                                         2.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         2.5555555555555554,
                                         5.333333333333333,
                                         8.333333333333332,
                                         5.777777777777777,
                                         3.,
                                         4.333333333333333,
                                         9.,
                                         14.,
                                         9.666666666666666,
                                         5.,
                                         3.2222222222222223,
                                         6.666666666666666,
                                         10.333333333333332,
                                         7.111111111111111,
                                         3.6666666666666665,
                                         1.7777777777777777,
                                         3.6666666666666665,
                                         5.666666666666666,
                                         3.888888888888889,
                                         2.,
                                         2.111111111111111,
                                         4.333333333333334,
                                         6.666666666666667,
                                         4.555555555555555,
                                         2.333333333333333,
                                         4.555555555555555,
                                         9.333333333333334,
                                         14.333333333333332,
                                         9.777777777777777,
                                         5.,
                                         7.333333333333333,
                                         15.,
                                         23.,
                                         15.666666666666666,
                                         8.,
                                         5.222222222222221,
                                         10.666666666666666,
                                         16.333333333333332,
                                         11.11111111111111,
                                         5.666666666666666,
                                         2.7777777777777777,
                                         5.666666666666666,
                                         8.666666666666666,
                                         5.888888888888889,
                                         3.};
  const std::array<int, 4> in_shape = {{3, 5, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         18.166666666666664,
                                         19.,
                                         26.5,
                                         27.666666666666668,
                                         25.,
                                         26.,
                                         31.833333333333332,
                                         33.,
                                         23.5,
                                         24.33333333333333,
                                         32.30555555555555,
                                         33.27777777777778,
                                         46.47222222222222,
                                         47.83333333333333,
                                         42.5,
                                         43.666666666666664,
                                         52.69444444444445,
                                         54.05555555555555,
                                         38.52777777777777,
                                         39.5,
                                         26.25,
                                         26.944444444444443,
                                         37.638888888888886,
                                         38.61111111111111,
                                         34.166666666666664,
                                         35.,
                                         42.08333333333333,
                                         43.05555555555556,
                                         30.694444444444443,
                                         31.38888888888889,
                                         38.75,
                                         39.44444444444444,
                                         55.138888888888886,
                                         56.11111111111111,
                                         49.166666666666664,
                                         50.00000000000001,
                                         59.58333333333333,
                                         60.55555555555556,
                                         43.19444444444444,
                                         43.888888888888886,
                                         58.69444444444444,
                                         59.666666666666664,
                                         83.41666666666666,
                                         84.77777777777779,
                                         74.16666666666666,
                                         75.33333333333334,
                                         89.63888888888889,
                                         91.,
                                         64.91666666666667,
                                         65.88888888888889,
                                         59.83333333333333,
                                         60.66666666666666,
                                         84.83333333333333,
                                         85.99999999999999,
                                         75.,
                                         75.99999999999999,
                                         90.16666666666667,
                                         91.33333333333333,
                                         65.16666666666666,
                                         66.,
                                         80.91666666666666,
                                         81.88888888888889,
                                         114.52777777777776,
                                         115.88888888888889,
                                         100.83333333333331,
                                         101.99999999999999,
                                         120.74999999999997,
                                         122.1111111111111,
                                         87.13888888888889,
                                         88.11111111111111,
                                         60.97222222222222,
                                         61.666666666666664,
                                         86.24999999999999,
                                         87.22222222222223,
                                         75.83333333333331,
                                         76.66666666666666,
                                         90.69444444444443,
                                         91.66666666666666,
                                         65.41666666666666,
                                         66.11111111111111,
                                         73.47222222222221,
                                         74.16666666666666,
                                         103.74999999999999,
                                         104.72222222222221,
                                         90.83333333333333,
                                         91.66666666666667,
                                         108.19444444444443,
                                         109.16666666666667,
                                         77.91666666666666,
                                         78.61111111111111,
                                         107.30555555555556,
                                         108.27777777777776,
                                         151.4722222222222,
                                         152.83333333333331,
                                         132.5,
                                         133.66666666666666,
                                         157.69444444444443,
                                         159.05555555555554,
                                         113.52777777777777,
                                         114.5,
                                         101.49999999999999,
                                         102.33333333333331,
                                         143.16666666666666,
                                         144.33333333333331,
                                         125.,
                                         125.99999999999999,
                                         148.5,
                                         149.66666666666666,
                                         106.83333333333331,
                                         107.66666666666666,
                                         129.52777777777777,
                                         130.5,
                                         182.58333333333331,
                                         183.94444444444446,
                                         159.16666666666666,
                                         160.33333333333331,
                                         188.80555555555554,
                                         190.16666666666666,
                                         135.75,
                                         136.7222222222222,
                                         95.69444444444444,
                                         96.38888888888889,
                                         134.86111111111111,
                                         135.83333333333334,
                                         117.5,
                                         118.33333333333331,
                                         139.30555555555554,
                                         140.27777777777777,
                                         100.13888888888889,
                                         100.83333333333333};
  const std::array<int, 4> in_shape = {{3, 5, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.999999999999999,
                                         9.,
                                         10.,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.6666666666666665,
                                         4.,
                                         2.2222222222222223,
                                         2.444444444444444,
                                         4.888888888888889,
                                         5.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         5.777777777777778,
                                         6.222222222222222,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         5.,
                                         5.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.444444444444445,
                                         4.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         4.888888888888889,
                                         5.111111111111111,
                                         10.222222222222221,
                                         10.666666666666666,
                                         16.,
                                         16.666666666666664,
                                         11.11111111111111,
                                         11.555555555555554,
                                         5.777777777777777,
                                         6.,
                                         8.333333333333334,
                                         8.666666666666666,
                                         17.333333333333332,
                                         18.,
                                         27.,
                                         28.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         9.666666666666666,
                                         10.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         12.888888888888888,
                                         13.333333333333332,
                                         20.,
                                         20.666666666666664,
                                         13.777777777777777,
                                         14.222222222222221,
                                         7.111111111111111,
                                         7.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         7.111111111111111,
                                         7.333333333333333,
                                         11.,
                                         11.333333333333332,
                                         7.555555555555555,
                                         7.777777777777778,
                                         3.888888888888889,
                                         4.,
                                         4.111111111111111,
                                         4.222222222222222,
                                         8.444444444444443,
                                         8.666666666666668,
                                         12.999999999999998,
                                         13.333333333333334,
                                         8.88888888888889,
                                         9.11111111111111,
                                         4.555555555555555,
                                         4.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         18.22222222222222,
                                         18.666666666666668,
                                         27.999999999999996,
                                         28.666666666666664,
                                         19.11111111111111,
                                         19.555555555555554,
                                         9.777777777777779,
                                         10.,
                                         14.333333333333332,
                                         14.666666666666666,
                                         29.33333333333333,
                                         30.,
                                         44.99999999999999,
                                         46.,
                                         30.666666666666668,
                                         31.333333333333332,
                                         15.666666666666668,
                                         16.,
                                         10.222222222222221,
                                         10.444444444444443,
                                         20.888888888888886,
                                         21.333333333333332,
                                         31.999999999999996,
                                         32.666666666666664,
                                         21.777777777777775,
                                         22.22222222222222,
                                         11.11111111111111,
                                         11.333333333333332,
                                         5.444444444444444,
                                         5.555555555555555,
                                         11.11111111111111,
                                         11.333333333333332,
                                         17.,
                                         17.333333333333332,
                                         11.555555555555554,
                                         11.777777777777779,
                                         5.888888888888888,
                                         6.};
  const std::array<int, 4> in_shape = {{3, 5, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         35.5,
                                         36.33333333333333,
                                         37.166666666666664,
                                         38.,
                                         51.83333333333333,
                                         53.,
                                         54.16666666666666,
                                         55.333333333333336,
                                         49.,
                                         50.,
                                         51.,
                                         52.,
                                         62.499999999999986,
                                         63.666666666666664,
                                         64.83333333333333,
                                         66.,
                                         46.16666666666666,
                                         47.,
                                         47.83333333333333,
                                         48.66666666666666,
                                         63.638888888888886,
                                         64.6111111111111,
                                         65.58333333333333,
                                         66.55555555555556,
                                         91.58333333333333,
                                         92.94444444444444,
                                         94.30555555555556,
                                         95.66666666666666,
                                         83.83333333333333,
                                         85.,
                                         86.16666666666666,
                                         87.33333333333333,
                                         104.02777777777777,
                                         105.3888888888889,
                                         106.74999999999999,
                                         108.1111111111111,
                                         76.08333333333333,
                                         77.05555555555554,
                                         78.02777777777777,
                                         79.,
                                         51.80555555555555,
                                         52.5,
                                         53.19444444444444,
                                         53.888888888888886,
                                         74.30555555555554,
                                         75.27777777777777,
                                         76.25,
                                         77.22222222222221,
                                         67.5,
                                         68.33333333333333,
                                         69.16666666666666,
                                         70.,
                                         83.19444444444444,
                                         84.16666666666666,
                                         85.13888888888889,
                                         86.11111111111111,
                                         60.69444444444444,
                                         61.388888888888886,
                                         62.08333333333333,
                                         62.77777777777778,
                                         76.80555555555556,
                                         77.5,
                                         78.19444444444444,
                                         78.88888888888889,
                                         109.30555555555554,
                                         110.27777777777777,
                                         111.25,
                                         112.22222222222221,
                                         97.49999999999999,
                                         98.33333333333333,
                                         99.16666666666666,
                                         100.00000000000001,
                                         118.19444444444443,
                                         119.16666666666666,
                                         120.13888888888889,
                                         121.11111111111111,
                                         85.69444444444444,
                                         86.38888888888889,
                                         87.08333333333333,
                                         87.77777777777777,
                                         116.41666666666667,
                                         117.38888888888889,
                                         118.3611111111111,
                                         119.33333333333333,
                                         165.4722222222222,
                                         166.83333333333331,
                                         168.19444444444446,
                                         169.55555555555557,
                                         147.16666666666666,
                                         148.33333333333331,
                                         149.5,
                                         150.66666666666669,
                                         177.91666666666663,
                                         179.27777777777777,
                                         180.63888888888889,
                                         182.,
                                         128.86111111111111,
                                         129.83333333333334,
                                         130.80555555555554,
                                         131.77777777777777,
                                         118.83333333333331,
                                         119.66666666666666,
                                         120.49999999999999,
                                         121.33333333333331,
                                         168.5,
                                         169.66666666666666,
                                         170.83333333333331,
                                         171.99999999999997,
                                         149.,
                                         150.,
                                         151.,
                                         151.99999999999997,
                                         179.16666666666666,
                                         180.33333333333334,
                                         181.50000000000003,
                                         182.66666666666666,
                                         129.5,
                                         130.33333333333331,
                                         131.16666666666666,
                                         132.,
                                         160.86111111111111,
                                         161.83333333333331,
                                         162.80555555555554,
                                         163.77777777777777,
                                         227.69444444444443,
                                         229.05555555555551,
                                         230.41666666666669,
                                         231.77777777777777,
                                         200.5,
                                         201.66666666666663,
                                         202.83333333333334,
                                         203.99999999999997,
                                         240.13888888888889,
                                         241.49999999999994,
                                         242.86111111111111,
                                         244.2222222222222,
                                         173.30555555555554,
                                         174.27777777777777,
                                         175.25,
                                         176.22222222222223,
                                         121.24999999999999,
                                         121.94444444444444,
                                         122.63888888888889,
                                         123.33333333333333,
                                         171.52777777777777,
                                         172.49999999999997,
                                         173.47222222222223,
                                         174.44444444444446,
                                         150.83333333333331,
                                         151.66666666666663,
                                         152.5,
                                         153.33333333333331,
                                         180.41666666666666,
                                         181.38888888888886,
                                         182.3611111111111,
                                         183.33333333333331,
                                         130.13888888888889,
                                         130.83333333333331,
                                         131.52777777777777,
                                         132.22222222222223,
                                         146.25,
                                         146.94444444444443,
                                         147.63888888888889,
                                         148.33333333333331,
                                         206.52777777777777,
                                         207.49999999999997,
                                         208.4722222222222,
                                         209.44444444444443,
                                         180.83333333333334,
                                         181.66666666666666,
                                         182.49999999999997,
                                         183.33333333333334,
                                         215.41666666666666,
                                         216.38888888888886,
                                         217.3611111111111,
                                         218.33333333333334,
                                         155.13888888888889,
                                         155.83333333333331,
                                         156.52777777777777,
                                         157.22222222222223,
                                         213.63888888888889,
                                         214.61111111111111,
                                         215.58333333333331,
                                         216.55555555555551,
                                         301.5833333333333,
                                         302.9444444444444,
                                         304.30555555555554,
                                         305.66666666666663,
                                         263.8333333333333,
                                         265.,
                                         266.16666666666663,
                                         267.3333333333333,
                                         314.0277777777777,
                                         315.38888888888886,
                                         316.75,
                                         318.1111111111111,
                                         226.08333333333331,
                                         227.05555555555554,
                                         228.02777777777777,
                                         229.,
                                         202.16666666666669,
                                         202.99999999999997,
                                         203.8333333333333,
                                         204.66666666666663,
                                         285.16666666666663,
                                         286.3333333333333,
                                         287.5,
                                         288.66666666666663,
                                         249.,
                                         250.,
                                         250.99999999999997,
                                         251.99999999999997,
                                         295.83333333333337,
                                         297.,
                                         298.16666666666663,
                                         299.3333333333333,
                                         212.83333333333331,
                                         213.66666666666663,
                                         214.49999999999997,
                                         215.33333333333331,
                                         258.0833333333333,
                                         259.05555555555554,
                                         260.02777777777777,
                                         261.,
                                         363.8055555555556,
                                         365.16666666666663,
                                         366.52777777777777,
                                         367.8888888888889,
                                         317.16666666666663,
                                         318.3333333333333,
                                         319.5,
                                         320.66666666666663,
                                         376.25,
                                         377.6111111111111,
                                         378.97222222222223,
                                         380.3333333333333,
                                         270.52777777777777,
                                         271.5,
                                         272.4722222222222,
                                         273.4444444444444,
                                         190.69444444444446,
                                         191.38888888888889,
                                         192.08333333333331,
                                         192.77777777777777,
                                         268.75,
                                         269.72222222222223,
                                         270.69444444444446,
                                         271.6666666666667,
                                         234.16666666666663,
                                         235.,
                                         235.83333333333331,
                                         236.66666666666663,
                                         277.63888888888886,
                                         278.6111111111111,
                                         279.5833333333333,
                                         280.55555555555554,
                                         199.58333333333331,
                                         200.27777777777777,
                                         200.97222222222223,
                                         201.66666666666666};
  const std::array<int, 4> in_shape = {{3, 5, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         10.,
                                         10.666666666666668,
                                         11.333333333333334,
                                         11.999999999999998,
                                         17.,
                                         18.,
                                         19.,
                                         20.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333333,
                                         7.666666666666666,
                                         8.,
                                         4.222222222222222,
                                         4.444444444444445,
                                         4.666666666666666,
                                         4.888888888888888,
                                         9.333333333333332,
                                         9.777777777777779,
                                         10.222222222222221,
                                         10.666666666666666,
                                         15.33333333333333,
                                         16.,
                                         16.666666666666664,
                                         17.333333333333332,
                                         11.111111111111109,
                                         11.555555555555555,
                                         12.,
                                         12.444444444444445,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333334,
                                         10.666666666666666,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         9.555555555555554,
                                         9.777777777777779,
                                         10.,
                                         10.222222222222221,
                                         20.,
                                         20.444444444444443,
                                         20.888888888888886,
                                         21.333333333333332,
                                         31.333333333333332,
                                         32.,
                                         32.666666666666664,
                                         33.33333333333333,
                                         21.777777777777775,
                                         22.22222222222222,
                                         22.666666666666664,
                                         23.111111111111107,
                                         11.333333333333332,
                                         11.555555555555554,
                                         11.777777777777779,
                                         12.,
                                         16.333333333333332,
                                         16.666666666666668,
                                         17.,
                                         17.333333333333332,
                                         34.,
                                         34.666666666666664,
                                         35.33333333333333,
                                         36.,
                                         52.99999999999999,
                                         54.,
                                         54.99999999999999,
                                         56.,
                                         36.666666666666664,
                                         37.33333333333333,
                                         37.99999999999999,
                                         38.666666666666664,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666668,
                                         20.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         26.22222222222222,
                                         26.666666666666664,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         27.111111111111107,
                                         27.555555555555554,
                                         28.,
                                         28.444444444444443,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         21.666666666666664,
                                         22.,
                                         22.333333333333332,
                                         22.666666666666664,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         7.666666666666666,
                                         7.777777777777778,
                                         7.888888888888888,
                                         8.,
                                         8.11111111111111,
                                         8.222222222222221,
                                         8.333333333333332,
                                         8.444444444444445,
                                         16.666666666666664,
                                         16.888888888888886,
                                         17.111111111111107,
                                         17.333333333333336,
                                         25.666666666666664,
                                         25.999999999999996,
                                         26.33333333333333,
                                         26.666666666666668,
                                         17.555555555555557,
                                         17.77777777777778,
                                         18.,
                                         18.22222222222222,
                                         9.,
                                         9.11111111111111,
                                         9.222222222222221,
                                         9.333333333333332,
                                         17.555555555555557,
                                         17.77777777777778,
                                         18.,
                                         18.22222222222222,
                                         35.99999999999999,
                                         36.44444444444444,
                                         36.888888888888886,
                                         37.333333333333336,
                                         55.33333333333333,
                                         55.99999999999999,
                                         56.66666666666666,
                                         57.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         38.666666666666664,
                                         39.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         19.77777777777778,
                                         20.,
                                         28.333333333333336,
                                         28.666666666666664,
                                         29.,
                                         29.333333333333332,
                                         57.99999999999999,
                                         58.66666666666666,
                                         59.33333333333333,
                                         60.,
                                         88.99999999999999,
                                         89.99999999999999,
                                         90.99999999999999,
                                         92.,
                                         60.66666666666666,
                                         61.333333333333336,
                                         61.99999999999999,
                                         62.666666666666664,
                                         31.,
                                         31.333333333333336,
                                         31.666666666666664,
                                         32.,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         41.33333333333333,
                                         41.77777777777777,
                                         42.22222222222222,
                                         42.666666666666664,
                                         63.33333333333333,
                                         63.99999999999999,
                                         64.66666666666667,
                                         65.33333333333333,
                                         43.11111111111111,
                                         43.55555555555555,
                                         43.99999999999999,
                                         44.44444444444444,
                                         22.,
                                         22.22222222222222,
                                         22.444444444444443,
                                         22.666666666666664,
                                         10.777777777777777,
                                         10.888888888888888,
                                         11.,
                                         11.11111111111111,
                                         22.,
                                         22.22222222222222,
                                         22.444444444444443,
                                         22.666666666666664,
                                         33.666666666666664,
                                         34.,
                                         34.33333333333333,
                                         34.666666666666664,
                                         22.888888888888886,
                                         23.111111111111107,
                                         23.333333333333332,
                                         23.555555555555557,
                                         11.666666666666666,
                                         11.777777777777777,
                                         11.888888888888888,
                                         12.};
  const std::array<int, 4> in_shape = {{3, 5, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         11.166666666666664,
                                         16.166666666666664,
                                         14.999999999999998,
                                         16.,
                                         20.,
                                         14.666666666666666,
                                         19.694444444444443,
                                         28.194444444444443,
                                         25.5,
                                         26.66666666666666,
                                         32.666666666666664,
                                         23.77777777777778,
                                         15.972222222222221,
                                         22.805555555555554,
                                         20.5,
                                         21.333333333333332,
                                         26.,
                                         18.88888888888889,
                                         23.47222222222222,
                                         33.30555555555556,
                                         29.5,
                                         30.333333333333336,
                                         36.5,
                                         26.388888888888886,
                                         35.52777777777777,
                                         50.36111111111111,
                                         44.5,
                                         45.666666666666664,
                                         54.833333333333336,
                                         39.61111111111111,
                                         36.16666666666667,
                                         51.166666666666664,
                                         45.,
                                         46.,
                                         54.99999999999999,
                                         39.66666666666667,
                                         48.861111111111114,
                                         69.02777777777777,
                                         60.49999999999999,
                                         61.66666666666666,
                                         73.5,
                                         52.94444444444444,
                                         36.80555555555556,
                                         51.972222222222214,
                                         45.49999999999999,
                                         46.33333333333333,
                                         55.16666666666666,
                                         39.72222222222222,
                                         44.30555555555556,
                                         62.472222222222214,
                                         54.5,
                                         55.33333333333333,
                                         65.66666666666666,
                                         47.22222222222222,
                                         64.69444444444444,
                                         91.19444444444444,
                                         79.5,
                                         80.66666666666666,
                                         95.66666666666666,
                                         68.77777777777777,
                                         61.16666666666666,
                                         86.16666666666666,
                                         75.,
                                         76.,
                                         90.,
                                         64.66666666666666,
                                         78.02777777777777,
                                         109.8611111111111,
                                         95.5,
                                         96.66666666666666,
                                         114.33333333333333,
                                         82.11111111111111,
                                         57.638888888888886,
                                         81.13888888888889,
                                         70.5,
                                         71.33333333333333,
                                         84.33333333333333,
                                         60.55555555555556};
  const std::array<int, 4> in_shape = {{3, 5, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         3.6666666666666665,
                                         6.,
                                         7.,
                                         4.999999999999999,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         3.3333333333333335,
                                         5.333333333333333,
                                         5.999999999999999,
                                         4.222222222222221,
                                         2.2222222222222223,
                                         1.,
                                         2.111111111111111,
                                         3.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         5.,
                                         3.444444444444444,
                                         1.7777777777777777,
                                         3.333333333333333,
                                         6.888888888888889,
                                         10.666666666666666,
                                         11.333333333333332,
                                         7.777777777777778,
                                         4.,
                                         5.666666666666666,
                                         11.666666666666666,
                                         18.,
                                         19.,
                                         12.999999999999998,
                                         6.666666666666666,
                                         4.222222222222221,
                                         8.666666666666666,
                                         13.333333333333332,
                                         13.999999999999998,
                                         9.555555555555555,
                                         4.888888888888889,
                                         2.333333333333333,
                                         4.777777777777777,
                                         7.333333333333332,
                                         7.666666666666666,
                                         5.222222222222221,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         5.666666666666666,
                                         8.666666666666666,
                                         9.,
                                         6.111111111111111,
                                         3.1111111111111107,
                                         6.,
                                         12.222222222222221,
                                         18.666666666666664,
                                         19.333333333333332,
                                         13.11111111111111,
                                         6.666666666666666,
                                         9.666666666666666,
                                         19.666666666666664,
                                         30.,
                                         31.,
                                         21.,
                                         10.666666666666666,
                                         6.888888888888888,
                                         14.,
                                         21.333333333333332,
                                         22.,
                                         14.88888888888889,
                                         7.555555555555555,
                                         3.6666666666666665,
                                         7.444444444444445,
                                         11.333333333333334,
                                         11.666666666666666,
                                         7.888888888888889,
                                         4.};
  const std::array<int, 4> in_shape = {{3, 5, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         21.499999999999996,
                                         22.33333333333333,
                                         31.166666666666664,
                                         32.33333333333333,
                                         29.,
                                         29.999999999999996,
                                         31.,
                                         32.,
                                         38.833333333333336,
                                         40.,
                                         28.499999999999996,
                                         29.333333333333332,
                                         38.416666666666664,
                                         39.388888888888886,
                                         55.02777777777777,
                                         56.388888888888886,
                                         49.833333333333336,
                                         51.,
                                         52.166666666666664,
                                         53.33333333333332,
                                         63.97222222222222,
                                         65.33333333333333,
                                         46.58333333333333,
                                         47.55555555555556,
                                         31.25,
                                         31.944444444444443,
                                         44.638888888888886,
                                         45.61111111111111,
                                         40.166666666666664,
                                         41.,
                                         41.83333333333333,
                                         42.666666666666664,
                                         51.02777777777778,
                                         52.,
                                         37.08333333333333,
                                         37.77777777777778,
                                         46.25,
                                         46.94444444444444,
                                         65.63888888888889,
                                         66.61111111111111,
                                         58.166666666666664,
                                         59.,
                                         59.833333333333336,
                                         60.66666666666667,
                                         72.02777777777777,
                                         73.,
                                         52.08333333333333,
                                         52.77777777777777,
                                         70.08333333333333,
                                         71.05555555555554,
                                         99.36111111111111,
                                         100.72222222222221,
                                         87.83333333333333,
                                         89.,
                                         90.16666666666667,
                                         91.33333333333333,
                                         108.30555555555554,
                                         109.66666666666667,
                                         78.24999999999999,
                                         79.22222222222221,
                                         71.5,
                                         72.33333333333334,
                                         101.16666666666666,
                                         102.33333333333333,
                                         88.99999999999999,
                                         90.,
                                         91.,
                                         92.,
                                         108.83333333333333,
                                         109.99999999999999,
                                         78.5,
                                         79.33333333333334,
                                         96.75,
                                         97.72222222222223,
                                         136.69444444444446,
                                         138.05555555555554,
                                         119.83333333333331,
                                         120.99999999999999,
                                         122.16666666666666,
                                         123.33333333333331,
                                         145.63888888888889,
                                         147.,
                                         104.91666666666666,
                                         105.88888888888889,
                                         72.91666666666666,
                                         73.61111111111111,
                                         102.97222222222221,
                                         103.94444444444443,
                                         90.16666666666666,
                                         90.99999999999999,
                                         91.83333333333331,
                                         92.66666666666666,
                                         109.36111111111111,
                                         110.33333333333331,
                                         78.75,
                                         79.44444444444444,
                                         87.91666666666666,
                                         88.61111111111111,
                                         123.97222222222223,
                                         124.94444444444443,
                                         108.16666666666667,
                                         109.,
                                         109.83333333333334,
                                         110.66666666666666,
                                         130.36111111111111,
                                         131.33333333333331,
                                         93.75,
                                         94.44444444444444,
                                         128.41666666666666,
                                         129.38888888888889,
                                         181.02777777777777,
                                         182.38888888888889,
                                         157.83333333333331,
                                         159.,
                                         160.16666666666669,
                                         161.33333333333331,
                                         189.97222222222223,
                                         191.33333333333331,
                                         136.58333333333334,
                                         137.55555555555554,
                                         121.49999999999997,
                                         122.33333333333331,
                                         171.16666666666663,
                                         172.33333333333331,
                                         149.,
                                         150.,
                                         151.,
                                         152.,
                                         178.83333333333334,
                                         180.,
                                         128.5,
                                         129.33333333333331,
                                         155.08333333333331,
                                         156.05555555555554,
                                         218.36111111111111,
                                         219.7222222222222,
                                         189.83333333333331,
                                         191.,
                                         192.16666666666666,
                                         193.33333333333331,
                                         227.30555555555554,
                                         228.66666666666666,
                                         163.25,
                                         164.22222222222223,
                                         114.58333333333333,
                                         115.27777777777777,
                                         161.30555555555557,
                                         162.27777777777777,
                                         140.16666666666666,
                                         141.,
                                         141.83333333333331,
                                         142.66666666666666,
                                         167.69444444444443,
                                         168.66666666666666,
                                         120.41666666666666,
                                         121.11111111111111};
  const std::array<int, 4> in_shape = {{3, 5, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         6.666666666666666,
                                         7.333333333333333,
                                         11.,
                                         12.,
                                         12.999999999999998,
                                         14.,
                                         9.333333333333332,
                                         9.999999999999998,
                                         5.,
                                         5.333333333333333,
                                         2.888888888888889,
                                         3.111111111111111,
                                         6.222222222222221,
                                         6.666666666666667,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333334,
                                         11.999999999999998,
                                         7.999999999999999,
                                         8.444444444444443,
                                         4.222222222222221,
                                         4.444444444444445,
                                         1.8888888888888888,
                                         2.,
                                         4.,
                                         4.222222222222222,
                                         6.333333333333333,
                                         6.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         9.666666666666666,
                                         10.,
                                         6.666666666666666,
                                         6.888888888888888,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         6.444444444444445,
                                         6.666666666666666,
                                         13.333333333333334,
                                         13.777777777777779,
                                         20.666666666666664,
                                         21.333333333333332,
                                         21.999999999999996,
                                         22.666666666666664,
                                         15.11111111111111,
                                         15.555555555555555,
                                         7.777777777777777,
                                         8.,
                                         11.,
                                         11.333333333333332,
                                         22.666666666666668,
                                         23.333333333333332,
                                         35.,
                                         36.,
                                         37.,
                                         38.,
                                         25.333333333333332,
                                         25.999999999999996,
                                         13.,
                                         13.333333333333332,
                                         8.222222222222221,
                                         8.444444444444443,
                                         16.88888888888889,
                                         17.333333333333332,
                                         26.,
                                         26.666666666666664,
                                         27.333333333333332,
                                         27.999999999999996,
                                         18.666666666666664,
                                         19.11111111111111,
                                         9.555555555555555,
                                         9.777777777777779,
                                         4.555555555555555,
                                         4.666666666666666,
                                         9.333333333333332,
                                         9.555555555555554,
                                         14.333333333333332,
                                         14.666666666666664,
                                         15.,
                                         15.333333333333332,
                                         10.222222222222221,
                                         10.444444444444443,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         11.11111111111111,
                                         11.333333333333332,
                                         17.,
                                         17.333333333333332,
                                         17.666666666666664,
                                         18.,
                                         12.,
                                         12.222222222222221,
                                         6.111111111111111,
                                         6.222222222222221,
                                         11.777777777777777,
                                         12.,
                                         24.,
                                         24.444444444444443,
                                         36.666666666666664,
                                         37.33333333333333,
                                         38.,
                                         38.666666666666664,
                                         25.77777777777778,
                                         26.22222222222222,
                                         13.11111111111111,
                                         13.333333333333332,
                                         19.,
                                         19.333333333333332,
                                         38.666666666666664,
                                         39.33333333333333,
                                         58.99999999999999,
                                         60.,
                                         60.99999999999999,
                                         62.,
                                         41.33333333333333,
                                         42.,
                                         21.,
                                         21.333333333333332,
                                         13.555555555555554,
                                         13.777777777777777,
                                         27.555555555555554,
                                         28.,
                                         42.,
                                         42.666666666666664,
                                         43.33333333333333,
                                         44.,
                                         29.333333333333332,
                                         29.77777777777778,
                                         14.88888888888889,
                                         15.11111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         14.666666666666664,
                                         14.88888888888889,
                                         22.33333333333333,
                                         22.666666666666668,
                                         23.,
                                         23.333333333333332,
                                         15.555555555555554,
                                         15.777777777777779,
                                         7.888888888888888,
                                         8.};
  const std::array<int, 4> in_shape = {{3, 5, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x5x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         42.166666666666664,
                                         42.99999999999999,
                                         43.833333333333336,
                                         44.66666666666666,
                                         61.166666666666664,
                                         62.33333333333333,
                                         63.5,
                                         64.66666666666666,
                                         57.,
                                         58.,
                                         59.,
                                         59.99999999999999,
                                         60.99999999999999,
                                         62.,
                                         63.,
                                         64.,
                                         76.5,
                                         77.66666666666667,
                                         78.83333333333331,
                                         80.,
                                         56.166666666666664,
                                         56.99999999999999,
                                         57.83333333333333,
                                         58.666666666666664,
                                         75.86111111111111,
                                         76.83333333333333,
                                         77.80555555555554,
                                         78.77777777777777,
                                         108.69444444444444,
                                         110.05555555555554,
                                         111.41666666666664,
                                         112.77777777777777,
                                         98.5,
                                         99.66666666666667,
                                         100.83333333333333,
                                         102.,
                                         103.16666666666664,
                                         104.33333333333333,
                                         105.5,
                                         106.66666666666664,
                                         126.58333333333333,
                                         127.94444444444444,
                                         129.30555555555554,
                                         130.66666666666666,
                                         92.19444444444444,
                                         93.16666666666666,
                                         94.13888888888889,
                                         95.11111111111111,
                                         61.80555555555556,
                                         62.5,
                                         63.19444444444444,
                                         63.888888888888886,
                                         88.30555555555556,
                                         89.27777777777777,
                                         90.24999999999999,
                                         91.22222222222221,
                                         79.5,
                                         80.33333333333333,
                                         81.16666666666666,
                                         82.,
                                         82.83333333333333,
                                         83.66666666666666,
                                         84.5,
                                         85.33333333333333,
                                         101.08333333333333,
                                         102.05555555555556,
                                         103.02777777777777,
                                         104.,
                                         73.47222222222221,
                                         74.16666666666666,
                                         74.86111111111111,
                                         75.55555555555556,
                                         91.80555555555556,
                                         92.5,
                                         93.19444444444443,
                                         93.88888888888889,
                                         130.30555555555554,
                                         131.27777777777777,
                                         132.25,
                                         133.22222222222223,
                                         115.5,
                                         116.33333333333333,
                                         117.16666666666666,
                                         118.,
                                         118.83333333333333,
                                         119.66666666666667,
                                         120.5,
                                         121.33333333333334,
                                         143.08333333333331,
                                         144.05555555555554,
                                         145.02777777777777,
                                         146.,
                                         103.47222222222221,
                                         104.16666666666666,
                                         104.8611111111111,
                                         105.55555555555554,
                                         139.19444444444446,
                                         140.16666666666666,
                                         141.13888888888886,
                                         142.1111111111111,
                                         197.3611111111111,
                                         198.72222222222223,
                                         200.08333333333334,
                                         201.44444444444443,
                                         174.5,
                                         175.66666666666666,
                                         176.83333333333331,
                                         178.,
                                         179.16666666666666,
                                         180.33333333333334,
                                         181.5,
                                         182.66666666666666,
                                         215.24999999999997,
                                         216.6111111111111,
                                         217.97222222222223,
                                         219.33333333333334,
                                         155.52777777777777,
                                         156.49999999999997,
                                         157.4722222222222,
                                         158.44444444444443,
                                         142.16666666666666,
                                         143.,
                                         143.83333333333331,
                                         144.66666666666669,
                                         201.16666666666666,
                                         202.33333333333331,
                                         203.49999999999997,
                                         204.66666666666666,
                                         177.,
                                         177.99999999999997,
                                         178.99999999999997,
                                         180.,
                                         181.,
                                         182.,
                                         183.,
                                         184.,
                                         216.5,
                                         217.66666666666666,
                                         218.83333333333331,
                                         219.99999999999997,
                                         156.16666666666666,
                                         157.,
                                         157.83333333333331,
                                         158.66666666666669,
                                         192.52777777777777,
                                         193.5,
                                         194.4722222222222,
                                         195.44444444444446,
                                         272.02777777777777,
                                         273.3888888888889,
                                         274.75,
                                         276.1111111111111,
                                         238.49999999999997,
                                         239.66666666666663,
                                         240.83333333333331,
                                         241.99999999999997,
                                         243.16666666666663,
                                         244.33333333333331,
                                         245.49999999999997,
                                         246.66666666666663,
                                         289.91666666666663,
                                         291.27777777777777,
                                         292.6388888888889,
                                         294.,
                                         208.8611111111111,
                                         209.83333333333331,
                                         210.80555555555554,
                                         211.77777777777777,
                                         145.13888888888889,
                                         145.83333333333331,
                                         146.52777777777777,
                                         147.22222222222223,
                                         204.97222222222223,
                                         205.94444444444443,
                                         206.91666666666669,
                                         207.88888888888886,
                                         179.49999999999997,
                                         180.33333333333331,
                                         181.16666666666663,
                                         181.99999999999997,
                                         182.83333333333331,
                                         183.66666666666663,
                                         184.49999999999997,
                                         185.33333333333331,
                                         217.75,
                                         218.72222222222223,
                                         219.69444444444443,
                                         220.66666666666663,
                                         156.80555555555554,
                                         157.5,
                                         158.19444444444443,
                                         158.88888888888889,
                                         175.13888888888889,
                                         175.83333333333331,
                                         176.52777777777777,
                                         177.22222222222223,
                                         246.9722222222222,
                                         247.94444444444446,
                                         248.91666666666666,
                                         249.88888888888886,
                                         215.5,
                                         216.33333333333334,
                                         217.16666666666666,
                                         218.,
                                         218.83333333333331,
                                         219.66666666666669,
                                         220.5,
                                         221.33333333333331,
                                         259.75,
                                         260.72222222222223,
                                         261.6944444444444,
                                         262.66666666666663,
                                         186.80555555555554,
                                         187.5,
                                         188.1944444444444,
                                         188.88888888888889,
                                         255.8611111111111,
                                         256.8333333333333,
                                         257.80555555555554,
                                         258.77777777777777,
                                         360.6944444444444,
                                         362.05555555555554,
                                         363.41666666666663,
                                         364.77777777777777,
                                         314.5,
                                         315.66666666666663,
                                         316.8333333333333,
                                         318.,
                                         319.16666666666663,
                                         320.33333333333337,
                                         321.5,
                                         322.66666666666663,
                                         378.58333333333337,
                                         379.94444444444446,
                                         381.3055555555555,
                                         382.66666666666663,
                                         272.19444444444446,
                                         273.1666666666667,
                                         274.13888888888886,
                                         275.1111111111111,
                                         242.16666666666666,
                                         242.99999999999994,
                                         243.83333333333331,
                                         244.66666666666663,
                                         341.1666666666667,
                                         342.33333333333326,
                                         343.5,
                                         344.66666666666663,
                                         297.,
                                         298.,
                                         298.99999999999994,
                                         300.,
                                         300.99999999999994,
                                         302.,
                                         303.,
                                         304.,
                                         356.5,
                                         357.6666666666667,
                                         358.83333333333326,
                                         360.,
                                         256.16666666666663,
                                         257.,
                                         257.8333333333333,
                                         258.66666666666663,
                                         309.19444444444446,
                                         310.16666666666663,
                                         311.1388888888889,
                                         312.1111111111111,
                                         435.3611111111111,
                                         436.72222222222223,
                                         438.08333333333337,
                                         439.4444444444444,
                                         378.5,
                                         379.66666666666663,
                                         380.8333333333333,
                                         382.,
                                         383.16666666666663,
                                         384.3333333333333,
                                         385.5,
                                         386.66666666666663,
                                         453.24999999999994,
                                         454.6111111111111,
                                         455.97222222222223,
                                         457.3333333333333,
                                         325.52777777777777,
                                         326.5,
                                         327.4722222222222,
                                         328.44444444444446,
                                         228.47222222222223,
                                         229.16666666666666,
                                         229.86111111111111,
                                         230.55555555555554,
                                         321.63888888888886,
                                         322.61111111111114,
                                         323.5833333333333,
                                         324.55555555555554,
                                         279.5,
                                         280.3333333333333,
                                         281.16666666666663,
                                         282.,
                                         282.8333333333333,
                                         283.66666666666663,
                                         284.5,
                                         285.3333333333333,
                                         334.41666666666663,
                                         335.38888888888886,
                                         336.3611111111111,
                                         337.3333333333333,
                                         240.13888888888886,
                                         240.83333333333331,
                                         241.52777777777777,
                                         242.22222222222223};
  const std::array<int, 4> in_shape = {{3, 5, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x5x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333334,
                                         6.666666666666667,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         21.,
                                         22.,
                                         23.,
                                         24.,
                                         25.,
                                         25.999999999999996,
                                         27.,
                                         28.,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         19.999999999999996,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333332,
                                         10.666666666666666,
                                         5.555555555555555,
                                         5.777777777777778,
                                         6.,
                                         6.222222222222222,
                                         11.999999999999998,
                                         12.444444444444443,
                                         12.88888888888889,
                                         13.333333333333334,
                                         19.333333333333332,
                                         20.,
                                         20.666666666666668,
                                         21.333333333333332,
                                         22.,
                                         22.666666666666668,
                                         23.333333333333332,
                                         23.999999999999996,
                                         15.555555555555555,
                                         15.999999999999998,
                                         16.444444444444443,
                                         16.888888888888886,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         12.333333333333332,
                                         12.666666666666666,
                                         13.,
                                         13.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666664,
                                         20.,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         12.666666666666664,
                                         12.88888888888889,
                                         13.11111111111111,
                                         13.333333333333332,
                                         26.22222222222222,
                                         26.666666666666668,
                                         27.11111111111111,
                                         27.555555555555557,
                                         40.66666666666666,
                                         41.33333333333333,
                                         42.,
                                         42.666666666666664,
                                         43.33333333333333,
                                         43.99999999999999,
                                         44.666666666666664,
                                         45.33333333333333,
                                         29.77777777777778,
                                         30.22222222222222,
                                         30.666666666666664,
                                         31.11111111111111,
                                         15.333333333333332,
                                         15.555555555555554,
                                         15.777777777777777,
                                         16.,
                                         21.666666666666664,
                                         22.,
                                         22.333333333333332,
                                         22.666666666666664,
                                         44.666666666666664,
                                         45.333333333333336,
                                         45.99999999999999,
                                         46.666666666666664,
                                         68.99999999999999,
                                         70.,
                                         71.,
                                         72.,
                                         72.99999999999999,
                                         74.,
                                         75.,
                                         76.,
                                         50.,
                                         50.666666666666664,
                                         51.33333333333333,
                                         51.99999999999999,
                                         25.666666666666664,
                                         26.,
                                         26.333333333333332,
                                         26.666666666666664,
                                         16.22222222222222,
                                         16.444444444444443,
                                         16.666666666666664,
                                         16.888888888888886,
                                         33.33333333333333,
                                         33.77777777777778,
                                         34.22222222222222,
                                         34.666666666666664,
                                         51.33333333333333,
                                         52.,
                                         52.66666666666666,
                                         53.33333333333333,
                                         54.,
                                         54.666666666666664,
                                         55.33333333333333,
                                         55.99999999999999,
                                         36.888888888888886,
                                         37.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         18.888888888888886,
                                         19.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         9.,
                                         9.11111111111111,
                                         9.222222222222221,
                                         9.333333333333332,
                                         18.444444444444443,
                                         18.666666666666664,
                                         18.888888888888886,
                                         19.111111111111107,
                                         28.33333333333333,
                                         28.666666666666664,
                                         28.999999999999996,
                                         29.33333333333333,
                                         29.666666666666664,
                                         30.,
                                         30.333333333333336,
                                         30.666666666666664,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         10.333333333333332,
                                         10.444444444444445,
                                         10.555555555555555,
                                         10.666666666666666,
                                         10.777777777777777,
                                         10.888888888888888,
                                         11.,
                                         11.11111111111111,
                                         22.,
                                         22.22222222222222,
                                         22.444444444444443,
                                         22.666666666666664,
                                         33.666666666666664,
                                         34.,
                                         34.33333333333333,
                                         34.666666666666664,
                                         35.,
                                         35.33333333333333,
                                         35.666666666666664,
                                         36.,
                                         23.77777777777778,
                                         24.,
                                         24.22222222222222,
                                         24.444444444444443,
                                         12.11111111111111,
                                         12.222222222222221,
                                         12.333333333333332,
                                         12.444444444444443,
                                         23.333333333333332,
                                         23.555555555555554,
                                         23.77777777777778,
                                         24.,
                                         47.55555555555556,
                                         48.,
                                         48.44444444444444,
                                         48.888888888888886,
                                         72.66666666666666,
                                         73.33333333333333,
                                         74.,
                                         74.66666666666666,
                                         75.33333333333333,
                                         76.,
                                         76.66666666666666,
                                         77.33333333333333,
                                         51.11111111111111,
                                         51.55555555555556,
                                         52.,
                                         52.44444444444444,
                                         26.,
                                         26.22222222222222,
                                         26.444444444444443,
                                         26.666666666666664,
                                         37.666666666666664,
                                         38.,
                                         38.333333333333336,
                                         38.666666666666664,
                                         76.66666666666666,
                                         77.33333333333333,
                                         78.,
                                         78.66666666666666,
                                         116.99999999999997,
                                         117.99999999999999,
                                         119.,
                                         120.,
                                         120.99999999999999,
                                         121.99999999999999,
                                         122.99999999999999,
                                         124.,
                                         82.,
                                         82.66666666666666,
                                         83.33333333333333,
                                         84.,
                                         41.666666666666664,
                                         42.,
                                         42.33333333333333,
                                         42.666666666666664,
                                         26.888888888888886,
                                         27.111111111111107,
                                         27.333333333333332,
                                         27.555555555555554,
                                         54.666666666666664,
                                         55.11111111111111,
                                         55.55555555555556,
                                         56.,
                                         83.33333333333331,
                                         84.,
                                         84.66666666666667,
                                         85.33333333333333,
                                         86.,
                                         86.66666666666666,
                                         87.33333333333333,
                                         88.,
                                         58.222222222222214,
                                         58.666666666666664,
                                         59.11111111111111,
                                         59.55555555555556,
                                         29.555555555555554,
                                         29.77777777777778,
                                         30.,
                                         30.22222222222222,
                                         14.333333333333332,
                                         14.444444444444443,
                                         14.555555555555555,
                                         14.666666666666666,
                                         29.111111111111107,
                                         29.33333333333333,
                                         29.555555555555557,
                                         29.77777777777778,
                                         44.33333333333333,
                                         44.66666666666666,
                                         45.,
                                         45.333333333333336,
                                         45.666666666666664,
                                         46.,
                                         46.33333333333333,
                                         46.666666666666664,
                                         30.888888888888886,
                                         31.111111111111107,
                                         31.33333333333333,
                                         31.555555555555557,
                                         15.666666666666666,
                                         15.777777777777777,
                                         15.888888888888888,
                                         16.};
  const std::array<int, 4> in_shape = {{3, 5, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.083333333333333,
                                         3.3611111111111107,
                                         4.611111111111111,
                                         3.6111111111111107,
                                         4.694444444444445,
                                         7.194444444444444,
                                         8.944444444444443,
                                         6.833333333333333,
                                         7.833333333333332,
                                         11.5,
                                         12.999999999999998,
                                         9.666666666666666,
                                         11.166666666666666,
                                         16.166666666666664,
                                         17.666666666666664,
                                         13.,
                                         17.47222222222222,
                                         25.083333333333332,
                                         26.833333333333332,
                                         19.61111111111111,
                                         13.749999999999998,
                                         19.694444444444443,
                                         20.944444444444443,
                                         15.277777777777779,
                                         18.749999999999996,
                                         26.69444444444444,
                                         27.94444444444444,
                                         20.27777777777778,
                                         28.027777777777775,
                                         39.86111111111111,
                                         41.61111111111111,
                                         30.166666666666668,
                                         27.83333333333333,
                                         39.5,
                                         41.,
                                         29.666666666666664,
                                         31.166666666666664,
                                         44.166666666666664,
                                         45.666666666666664,
                                         33.,
                                         40.80555555555555,
                                         57.75,
                                         59.5,
                                         42.94444444444444,
                                         30.416666666666664,
                                         43.02777777777778,
                                         44.27777777777778,
                                         31.944444444444443,
                                         35.416666666666664,
                                         50.02777777777777,
                                         51.27777777777777,
                                         36.94444444444444,
                                         51.36111111111111,
                                         72.52777777777777,
                                         74.27777777777777,
                                         53.5,
                                         47.83333333333333,
                                         67.5,
                                         69.,
                                         49.666666666666664,
                                         51.166666666666664,
                                         72.16666666666666,
                                         73.66666666666666,
                                         53.,
                                         64.13888888888889,
                                         90.41666666666666,
                                         92.16666666666667,
                                         66.27777777777777,
                                         47.08333333333333,
                                         66.3611111111111,
                                         67.6111111111111,
                                         48.61111111111111};
  const std::array<int, 4> in_shape = {{3, 6, 4, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x4x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.3333333333333333,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         1.1111111111111112,
                                         1.1111111111111112,
                                         0.6666666666666666,
                                         1.,
                                         2.3333333333333335,
                                         2.3333333333333335,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         3.6666666666666665,
                                         3.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         2.888888888888889,
                                         2.888888888888889,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         1.6666666666666665,
                                         1.6666666666666665,
                                         0.8888888888888888,
                                         1.,
                                         2.111111111111111,
                                         2.111111111111111,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         4.666666666666666,
                                         4.666666666666666,
                                         2.4444444444444446,
                                         3.666666666666667,
                                         7.666666666666666,
                                         7.666666666666666,
                                         4.,
                                         4.333333333333333,
                                         9.,
                                         9.,
                                         4.666666666666666,
                                         3.1111111111111107,
                                         6.444444444444444,
                                         6.444444444444444,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         3.444444444444444,
                                         3.444444444444444,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         3.888888888888889,
                                         3.888888888888889,
                                         2.,
                                         4.,
                                         8.222222222222221,
                                         8.222222222222221,
                                         4.222222222222222,
                                         6.333333333333333,
                                         12.999999999999998,
                                         12.999999999999998,
                                         6.666666666666666,
                                         7.,
                                         14.333333333333332,
                                         14.333333333333332,
                                         7.333333333333332,
                                         4.888888888888888,
                                         9.999999999999998,
                                         9.999999999999998,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         5.222222222222221,
                                         5.222222222222221,
                                         2.6666666666666665};
  const std::array<int, 4> in_shape = {{3, 6, 4, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {3.4722222222222223,
                                         4.166666666666666,
                                         5.75,
                                         6.722222222222221,
                                         8.25,
                                         9.222222222222221,
                                         6.527777777777778,
                                         7.222222222222221,
                                         8.416666666666666,
                                         9.38888888888889,
                                         13.027777777777775,
                                         14.388888888888888,
                                         16.527777777777775,
                                         17.888888888888886,
                                         12.694444444444443,
                                         13.666666666666666,
                                         14.833333333333332,
                                         15.666666666666664,
                                         21.83333333333333,
                                         23.,
                                         24.83333333333333,
                                         25.999999999999996,
                                         18.5,
                                         19.333333333333332,
                                         21.5,
                                         22.333333333333332,
                                         31.166666666666664,
                                         32.33333333333333,
                                         34.166666666666664,
                                         35.33333333333333,
                                         25.166666666666664,
                                         26.,
                                         33.97222222222222,
                                         34.94444444444444,
                                         48.80555555555555,
                                         50.166666666666664,
                                         52.30555555555555,
                                         53.666666666666664,
                                         38.25,
                                         39.22222222222222,
                                         26.805555555555557,
                                         27.499999999999996,
                                         38.416666666666664,
                                         39.388888888888886,
                                         40.916666666666664,
                                         41.888888888888886,
                                         29.86111111111111,
                                         30.555555555555557,
                                         36.80555555555556,
                                         37.49999999999999,
                                         52.416666666666664,
                                         53.38888888888888,
                                         54.916666666666664,
                                         55.88888888888888,
                                         39.861111111111114,
                                         40.55555555555556,
                                         55.08333333333333,
                                         56.05555555555555,
                                         78.36111111111111,
                                         79.72222222222221,
                                         81.8611111111111,
                                         83.22222222222221,
                                         59.361111111111114,
                                         60.333333333333336,
                                         54.83333333333333,
                                         55.66666666666666,
                                         77.83333333333333,
                                         79.,
                                         80.83333333333333,
                                         82.,
                                         58.49999999999999,
                                         59.33333333333333,
                                         61.49999999999999,
                                         62.33333333333333,
                                         87.16666666666667,
                                         88.33333333333333,
                                         90.16666666666666,
                                         91.33333333333333,
                                         65.16666666666666,
                                         66.,
                                         80.6388888888889,
                                         81.6111111111111,
                                         114.1388888888889,
                                         115.5,
                                         117.63888888888889,
                                         119.,
                                         84.91666666666666,
                                         85.88888888888889,
                                         60.138888888888886,
                                         60.83333333333333,
                                         85.08333333333333,
                                         86.05555555555556,
                                         87.58333333333333,
                                         88.55555555555556,
                                         63.19444444444444,
                                         63.888888888888886,
                                         70.13888888888889,
                                         70.83333333333333,
                                         99.08333333333333,
                                         100.05555555555554,
                                         101.58333333333333,
                                         102.55555555555554,
                                         73.19444444444444,
                                         73.88888888888889,
                                         101.74999999999999,
                                         102.72222222222221,
                                         143.69444444444443,
                                         145.05555555555554,
                                         147.19444444444443,
                                         148.55555555555554,
                                         106.02777777777777,
                                         107.,
                                         94.83333333333333,
                                         95.66666666666666,
                                         133.83333333333334,
                                         135.,
                                         136.83333333333331,
                                         138.,
                                         98.5,
                                         99.33333333333333,
                                         101.5,
                                         102.33333333333333,
                                         143.16666666666666,
                                         144.33333333333331,
                                         146.16666666666669,
                                         147.33333333333331,
                                         105.16666666666666,
                                         106.,
                                         127.30555555555554,
                                         128.27777777777777,
                                         179.4722222222222,
                                         180.83333333333331,
                                         182.9722222222222,
                                         184.33333333333334,
                                         131.58333333333331,
                                         132.55555555555554,
                                         93.47222222222223,
                                         94.16666666666666,
                                         131.75,
                                         132.7222222222222,
                                         134.25,
                                         135.2222222222222,
                                         96.52777777777777,
                                         97.22222222222221};
  const std::array<int, 4> in_shape = {{3, 6, 4, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x4x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.7777777777777777,
                                         2.2222222222222223,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         4.,
                                         4.666666666666667,
                                         4.,
                                         4.666666666666667,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         6.666666666666666,
                                         7.333333333333333,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.777777777777778,
                                         5.333333333333334,
                                         5.777777777777778,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         3.1111111111111107,
                                         3.333333333333333,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         2.,
                                         4.,
                                         4.222222222222222,
                                         4.,
                                         4.222222222222222,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         4.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         8.88888888888889,
                                         9.333333333333332,
                                         4.666666666666666,
                                         4.888888888888889,
                                         6.999999999999999,
                                         7.333333333333334,
                                         14.666666666666668,
                                         15.333333333333332,
                                         14.666666666666668,
                                         15.333333333333332,
                                         7.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         8.666666666666666,
                                         17.333333333333332,
                                         18.,
                                         17.333333333333332,
                                         18.,
                                         9.,
                                         9.333333333333332,
                                         6.,
                                         6.222222222222221,
                                         12.444444444444445,
                                         12.888888888888888,
                                         12.444444444444445,
                                         12.888888888888888,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         6.666666666666666,
                                         6.888888888888888,
                                         6.666666666666666,
                                         6.888888888888888,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         7.555555555555555,
                                         7.777777777777778,
                                         7.555555555555555,
                                         7.777777777777778,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         16.,
                                         16.444444444444443,
                                         16.,
                                         16.444444444444443,
                                         8.222222222222221,
                                         8.444444444444445,
                                         12.333333333333332,
                                         12.666666666666666,
                                         25.333333333333336,
                                         25.999999999999996,
                                         25.333333333333336,
                                         25.999999999999996,
                                         13.,
                                         13.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         27.999999999999996,
                                         28.666666666666664,
                                         27.999999999999996,
                                         28.666666666666664,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         19.555555555555554,
                                         19.999999999999996,
                                         19.555555555555554,
                                         19.999999999999996,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         10.222222222222221,
                                         10.444444444444443,
                                         10.222222222222221,
                                         10.444444444444443,
                                         5.222222222222222,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{3, 6, 4, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {6.249999999999999,
                                         6.944444444444445,
                                         7.638888888888888,
                                         8.333333333333332,
                                         10.527777777777777,
                                         11.5,
                                         12.472222222222221,
                                         13.444444444444443,
                                         15.527777777777775,
                                         16.5,
                                         17.47222222222222,
                                         18.444444444444443,
                                         12.36111111111111,
                                         13.055555555555555,
                                         13.749999999999998,
                                         14.444444444444443,
                                         15.86111111111111,
                                         16.833333333333332,
                                         17.805555555555554,
                                         18.77777777777778,
                                         24.694444444444443,
                                         26.05555555555555,
                                         27.416666666666664,
                                         28.777777777777775,
                                         31.694444444444443,
                                         33.05555555555555,
                                         34.416666666666664,
                                         35.77777777777777,
                                         24.416666666666664,
                                         25.388888888888886,
                                         26.361111111111107,
                                         27.333333333333332,
                                         28.833333333333332,
                                         29.666666666666664,
                                         30.499999999999996,
                                         31.33333333333333,
                                         42.49999999999999,
                                         43.66666666666666,
                                         44.83333333333333,
                                         46.,
                                         48.49999999999999,
                                         49.66666666666666,
                                         50.83333333333333,
                                         51.99999999999999,
                                         36.166666666666664,
                                         37.,
                                         37.83333333333333,
                                         38.666666666666664,
                                         42.166666666666664,
                                         43.,
                                         43.83333333333333,
                                         44.666666666666664,
                                         61.16666666666666,
                                         62.33333333333333,
                                         63.499999999999986,
                                         64.66666666666666,
                                         67.16666666666666,
                                         68.33333333333333,
                                         69.5,
                                         70.66666666666666,
                                         49.5,
                                         50.33333333333333,
                                         51.166666666666664,
                                         52.,
                                         66.97222222222221,
                                         67.94444444444444,
                                         68.91666666666666,
                                         69.88888888888889,
                                         96.25,
                                         97.6111111111111,
                                         98.97222222222221,
                                         100.33333333333333,
                                         103.24999999999999,
                                         104.6111111111111,
                                         105.97222222222221,
                                         107.33333333333333,
                                         75.52777777777777,
                                         76.5,
                                         77.47222222222223,
                                         78.44444444444444,
                                         52.916666666666664,
                                         53.611111111111114,
                                         54.30555555555556,
                                         54.99999999999999,
                                         75.86111111111111,
                                         76.83333333333333,
                                         77.80555555555556,
                                         78.77777777777777,
                                         80.8611111111111,
                                         81.83333333333333,
                                         82.80555555555554,
                                         83.77777777777777,
                                         59.02777777777777,
                                         59.72222222222222,
                                         60.416666666666664,
                                         61.111111111111114,
                                         72.91666666666666,
                                         73.61111111111111,
                                         74.30555555555554,
                                         74.99999999999999,
                                         103.8611111111111,
                                         104.83333333333333,
                                         105.80555555555556,
                                         106.77777777777776,
                                         108.8611111111111,
                                         109.83333333333333,
                                         110.80555555555557,
                                         111.77777777777776,
                                         79.02777777777777,
                                         79.72222222222223,
                                         80.41666666666666,
                                         81.11111111111111,
                                         109.19444444444443,
                                         110.16666666666666,
                                         111.13888888888887,
                                         112.1111111111111,
                                         155.36111111111111,
                                         156.72222222222223,
                                         158.08333333333331,
                                         159.44444444444443,
                                         162.3611111111111,
                                         163.7222222222222,
                                         165.08333333333334,
                                         166.44444444444443,
                                         117.75,
                                         118.72222222222223,
                                         119.69444444444443,
                                         120.66666666666667,
                                         108.83333333333333,
                                         109.66666666666666,
                                         110.5,
                                         111.33333333333331,
                                         154.49999999999997,
                                         155.66666666666666,
                                         156.83333333333334,
                                         158.,
                                         160.49999999999997,
                                         161.66666666666666,
                                         162.83333333333334,
                                         164.,
                                         116.16666666666666,
                                         116.99999999999999,
                                         117.83333333333331,
                                         118.66666666666666,
                                         122.16666666666666,
                                         122.99999999999999,
                                         123.83333333333333,
                                         124.66666666666666,
                                         173.16666666666666,
                                         174.33333333333334,
                                         175.49999999999997,
                                         176.66666666666666,
                                         179.16666666666669,
                                         180.33333333333331,
                                         181.49999999999997,
                                         182.66666666666666,
                                         129.5,
                                         130.33333333333331,
                                         131.16666666666666,
                                         132.,
                                         160.30555555555551,
                                         161.2777777777778,
                                         162.25,
                                         163.2222222222222,
                                         226.91666666666663,
                                         228.2777777777778,
                                         229.63888888888889,
                                         231.,
                                         233.91666666666666,
                                         235.27777777777777,
                                         236.63888888888889,
                                         238.,
                                         168.8611111111111,
                                         169.83333333333331,
                                         170.80555555555554,
                                         171.77777777777777,
                                         119.58333333333331,
                                         120.27777777777777,
                                         120.97222222222221,
                                         121.66666666666666,
                                         169.19444444444446,
                                         170.16666666666666,
                                         171.13888888888889,
                                         172.11111111111111,
                                         174.19444444444446,
                                         175.16666666666666,
                                         176.13888888888889,
                                         177.11111111111111,
                                         125.69444444444444,
                                         126.38888888888889,
                                         127.08333333333333,
                                         127.77777777777777,
                                         139.58333333333331,
                                         140.27777777777777,
                                         140.9722222222222,
                                         141.66666666666666,
                                         197.19444444444443,
                                         198.16666666666666,
                                         199.13888888888889,
                                         200.1111111111111,
                                         202.19444444444446,
                                         203.16666666666666,
                                         204.13888888888889,
                                         205.1111111111111,
                                         145.69444444444446,
                                         146.38888888888889,
                                         147.08333333333331,
                                         147.77777777777777,
                                         202.52777777777777,
                                         203.49999999999997,
                                         204.4722222222222,
                                         205.44444444444443,
                                         286.0277777777777,
                                         287.38888888888886,
                                         288.75,
                                         290.1111111111111,
                                         293.0277777777778,
                                         294.38888888888886,
                                         295.75,
                                         297.1111111111111,
                                         211.08333333333334,
                                         212.05555555555554,
                                         213.02777777777777,
                                         214.,
                                         188.83333333333334,
                                         189.66666666666666,
                                         190.5,
                                         191.33333333333331,
                                         266.5,
                                         267.6666666666667,
                                         268.83333333333337,
                                         270.,
                                         272.5,
                                         273.66666666666663,
                                         274.83333333333337,
                                         276.,
                                         196.16666666666666,
                                         197.,
                                         197.83333333333331,
                                         198.66666666666666,
                                         202.16666666666669,
                                         203.,
                                         203.83333333333334,
                                         204.66666666666666,
                                         285.1666666666667,
                                         286.3333333333333,
                                         287.5,
                                         288.66666666666663,
                                         291.16666666666663,
                                         292.33333333333337,
                                         293.5,
                                         294.66666666666663,
                                         209.49999999999994,
                                         210.33333333333331,
                                         211.16666666666663,
                                         212.,
                                         253.63888888888889,
                                         254.6111111111111,
                                         255.58333333333334,
                                         256.55555555555554,
                                         357.5833333333333,
                                         358.9444444444444,
                                         360.3055555555556,
                                         361.66666666666663,
                                         364.5833333333333,
                                         365.9444444444444,
                                         367.30555555555554,
                                         368.6666666666667,
                                         262.1944444444444,
                                         263.16666666666663,
                                         264.13888888888886,
                                         265.1111111111111,
                                         186.24999999999997,
                                         186.94444444444446,
                                         187.63888888888889,
                                         188.33333333333331,
                                         262.52777777777777,
                                         263.5,
                                         264.47222222222223,
                                         265.4444444444444,
                                         267.52777777777777,
                                         268.5,
                                         269.4722222222222,
                                         270.4444444444444,
                                         192.3611111111111,
                                         193.05555555555554,
                                         193.75,
                                         194.44444444444443};
  const std::array<int, 4> in_shape = {{3, 6, 4, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x4x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         1.5555555555555554,
                                         1.7777777777777777,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         3.111111111111111,
                                         3.5555555555555554,
                                         3.9999999999999996,
                                         4.444444444444445,
                                         2.,
                                         2.222222222222222,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         3.6666666666666665,
                                         4.,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333333,
                                         6.666666666666666,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         7.666666666666666,
                                         8.,
                                         4.666666666666666,
                                         4.888888888888889,
                                         5.111111111111111,
                                         5.333333333333333,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         10.222222222222221,
                                         10.666666666666668,
                                         11.11111111111111,
                                         11.555555555555555,
                                         5.555555555555555,
                                         5.777777777777777,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         3.,
                                         3.1111111111111107,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         6.,
                                         6.222222222222221,
                                         6.444444444444445,
                                         6.666666666666666,
                                         3.222222222222222,
                                         3.333333333333333,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         3.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         7.777777777777777,
                                         8.,
                                         8.222222222222221,
                                         8.444444444444445,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.222222222222221,
                                         8.444444444444443,
                                         8.666666666666666,
                                         8.88888888888889,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         17.333333333333332,
                                         17.77777777777778,
                                         18.22222222222222,
                                         18.666666666666664,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         13.666666666666664,
                                         13.999999999999998,
                                         14.333333333333332,
                                         14.666666666666668,
                                         28.666666666666664,
                                         29.333333333333336,
                                         29.999999999999996,
                                         30.666666666666664,
                                         28.666666666666664,
                                         29.333333333333336,
                                         29.999999999999996,
                                         30.666666666666664,
                                         15.,
                                         15.333333333333332,
                                         15.666666666666666,
                                         16.,
                                         16.333333333333332,
                                         16.666666666666664,
                                         17.,
                                         17.333333333333332,
                                         34.,
                                         34.666666666666664,
                                         35.333333333333336,
                                         36.,
                                         34.,
                                         34.666666666666664,
                                         35.333333333333336,
                                         36.,
                                         17.666666666666668,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         11.777777777777777,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         24.444444444444443,
                                         24.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         24.444444444444443,
                                         24.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         12.666666666666666,
                                         12.88888888888889,
                                         13.11111111111111,
                                         13.333333333333332,
                                         6.333333333333333,
                                         6.444444444444444,
                                         6.555555555555555,
                                         6.666666666666666,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         7.444444444444444,
                                         7.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         7.666666666666666,
                                         7.777777777777778,
                                         7.888888888888888,
                                         8.,
                                         15.333333333333332,
                                         15.555555555555554,
                                         15.777777777777775,
                                         16.,
                                         31.555555555555557,
                                         32.,
                                         32.44444444444444,
                                         32.888888888888886,
                                         31.555555555555557,
                                         32.,
                                         32.44444444444444,
                                         32.888888888888886,
                                         16.22222222222222,
                                         16.444444444444443,
                                         16.666666666666664,
                                         16.88888888888889,
                                         24.333333333333332,
                                         24.666666666666664,
                                         24.999999999999996,
                                         25.333333333333332,
                                         50.,
                                         50.66666666666667,
                                         51.33333333333333,
                                         51.99999999999999,
                                         50.,
                                         50.66666666666667,
                                         51.33333333333333,
                                         51.99999999999999,
                                         25.666666666666664,
                                         26.,
                                         26.33333333333333,
                                         26.666666666666664,
                                         27.,
                                         27.333333333333332,
                                         27.666666666666664,
                                         28.,
                                         55.33333333333333,
                                         55.99999999999999,
                                         56.66666666666666,
                                         57.33333333333333,
                                         55.33333333333333,
                                         55.99999999999999,
                                         56.66666666666666,
                                         57.33333333333333,
                                         28.333333333333332,
                                         28.666666666666664,
                                         29.,
                                         29.33333333333333,
                                         18.888888888888886,
                                         19.11111111111111,
                                         19.333333333333332,
                                         19.555555555555554,
                                         38.66666666666666,
                                         39.11111111111111,
                                         39.55555555555555,
                                         39.99999999999999,
                                         38.66666666666666,
                                         39.11111111111111,
                                         39.55555555555555,
                                         39.99999999999999,
                                         19.77777777777778,
                                         20.,
                                         20.22222222222222,
                                         20.444444444444443,
                                         9.888888888888888,
                                         10.,
                                         10.11111111111111,
                                         10.222222222222221,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         10.333333333333332,
                                         10.444444444444445,
                                         10.555555555555555,
                                         10.666666666666666};
  const std::array<int, 4> in_shape = {{3, 6, 4, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.3611111111111107,
                                         3.7499999999999996,
                                         4.166666666666666,
                                         5.972222222222221,
                                         4.583333333333333,
                                         5.527777777777777,
                                         8.36111111111111,
                                         8.5,
                                         11.472222222222221,
                                         8.63888888888889,
                                         9.5,
                                         13.833333333333334,
                                         13.,
                                         16.5,
                                         12.166666666666664,
                                         13.666666666666666,
                                         19.666666666666664,
                                         18.,
                                         22.33333333333333,
                                         16.333333333333332,
                                         21.5,
                                         30.72222222222222,
                                         27.66666666666666,
                                         33.83333333333333,
                                         24.61111111111111,
                                         16.944444444444443,
                                         24.166666666666664,
                                         21.666666666666664,
                                         26.388888888888886,
                                         19.166666666666664,
                                         23.194444444444443,
                                         32.916666666666664,
                                         29.166666666666664,
                                         35.138888888888886,
                                         25.416666666666664,
                                         34.69444444444444,
                                         49.19444444444444,
                                         43.49999999999999,
                                         52.30555555555555,
                                         37.80555555555556,
                                         34.49999999999999,
                                         48.83333333333333,
                                         43.,
                                         51.5,
                                         37.166666666666664,
                                         38.666666666666664,
                                         54.666666666666664,
                                         47.99999999999999,
                                         57.33333333333332,
                                         41.33333333333333,
                                         50.66666666666667,
                                         71.55555555555556,
                                         62.66666666666667,
                                         74.66666666666666,
                                         53.77777777777777,
                                         37.77777777777778,
                                         53.333333333333336,
                                         46.66666666666666,
                                         55.55555555555556,
                                         40.,
                                         44.02777777777777,
                                         62.08333333333333,
                                         54.166666666666664,
                                         64.30555555555556,
                                         46.24999999999999,
                                         63.8611111111111,
                                         90.02777777777777,
                                         78.5,
                                         93.13888888888889,
                                         66.97222222222221,
                                         59.49999999999999,
                                         83.83333333333334,
                                         72.99999999999999,
                                         86.49999999999999,
                                         62.16666666666667,
                                         63.66666666666667,
                                         89.66666666666666,
                                         77.99999999999999,
                                         92.33333333333334,
                                         66.33333333333333,
                                         79.83333333333333,
                                         112.3888888888889,
                                         97.66666666666667,
                                         115.49999999999999,
                                         82.94444444444444,
                                         58.611111111111114,
                                         82.5,
                                         71.66666666666666,
                                         84.72222222222221,
                                         60.83333333333333};
  const std::array<int, 4> in_shape = {{3, 6, 5, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x5x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         0.5555555555555556,
                                         0.3333333333333333,
                                         0.5555555555555556,
                                         1.3333333333333333,
                                         2.3333333333333335,
                                         1.7777777777777777,
                                         1.,
                                         1.3333333333333333,
                                         2.9999999999999996,
                                         5.,
                                         3.6666666666666665,
                                         2.,
                                         2.333333333333333,
                                         5.,
                                         8.,
                                         5.666666666666666,
                                         3.,
                                         1.8888888888888888,
                                         4.,
                                         6.333333333333333,
                                         4.444444444444444,
                                         2.333333333333333,
                                         1.1111111111111112,
                                         2.333333333333333,
                                         3.666666666666666,
                                         2.5555555555555554,
                                         1.3333333333333333,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         3.222222222222222,
                                         1.6666666666666665,
                                         3.2222222222222223,
                                         6.666666666666666,
                                         10.333333333333332,
                                         7.111111111111111,
                                         3.6666666666666665,
                                         5.333333333333334,
                                         11.,
                                         16.999999999999996,
                                         11.666666666666664,
                                         6.,
                                         6.333333333333333,
                                         13.,
                                         20.,
                                         13.666666666666664,
                                         7.,
                                         4.555555555555555,
                                         9.333333333333334,
                                         14.333333333333332,
                                         9.777777777777777,
                                         5.,
                                         2.444444444444444,
                                         5.,
                                         7.666666666666666,
                                         5.222222222222221,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         5.666666666666666,
                                         8.666666666666666,
                                         5.888888888888889,
                                         3.,
                                         5.888888888888888,
                                         11.999999999999998,
                                         18.333333333333332,
                                         12.444444444444443,
                                         6.333333333333333,
                                         9.333333333333332,
                                         19.,
                                         28.999999999999996,
                                         19.666666666666664,
                                         10.,
                                         10.333333333333332,
                                         21.,
                                         32.,
                                         21.666666666666664,
                                         11.,
                                         7.222222222222221,
                                         14.666666666666668,
                                         22.333333333333332,
                                         15.11111111111111,
                                         7.666666666666666,
                                         3.7777777777777777,
                                         7.666666666666666,
                                         11.666666666666666,
                                         7.888888888888889,
                                         4.};
  const std::array<int, 4> in_shape = {{3, 6, 5, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.027777777777778,
                                         4.722222222222221,
                                         6.527777777777777,
                                         7.499999999999999,
                                         7.5,
                                         8.333333333333332,
                                         10.972222222222221,
                                         11.944444444444443,
                                         8.472222222222221,
                                         9.166666666666666,
                                         10.083333333333332,
                                         11.055555555555554,
                                         15.36111111111111,
                                         16.72222222222222,
                                         15.833333333333332,
                                         17.,
                                         21.583333333333332,
                                         22.944444444444443,
                                         16.305555555555554,
                                         17.27777777777778,
                                         18.166666666666664,
                                         19.,
                                         26.5,
                                         27.666666666666668,
                                         25.,
                                         26.,
                                         31.833333333333332,
                                         33.,
                                         23.5,
                                         24.33333333333333,
                                         26.5,
                                         27.333333333333332,
                                         38.166666666666664,
                                         39.33333333333333,
                                         35.,
                                         36.,
                                         43.5,
                                         44.66666666666666,
                                         31.83333333333333,
                                         32.666666666666664,
                                         42.02777777777777,
                                         43.,
                                         60.08333333333332,
                                         61.44444444444444,
                                         54.166666666666664,
                                         55.33333333333332,
                                         66.30555555555554,
                                         67.66666666666666,
                                         48.25,
                                         49.22222222222222,
                                         33.19444444444444,
                                         33.888888888888886,
                                         47.36111111111111,
                                         48.33333333333333,
                                         42.5,
                                         43.33333333333333,
                                         51.80555555555555,
                                         52.77777777777777,
                                         37.638888888888886,
                                         38.33333333333333,
                                         45.69444444444444,
                                         46.388888888888886,
                                         64.8611111111111,
                                         65.83333333333333,
                                         57.5,
                                         58.33333333333333,
                                         69.30555555555556,
                                         70.27777777777777,
                                         50.138888888888886,
                                         50.83333333333333,
                                         68.41666666666666,
                                         69.38888888888889,
                                         97.02777777777776,
                                         98.38888888888889,
                                         85.83333333333334,
                                         86.99999999999999,
                                         103.25,
                                         104.6111111111111,
                                         74.63888888888889,
                                         75.61111111111111,
                                         68.16666666666666,
                                         68.99999999999999,
                                         96.49999999999999,
                                         97.66666666666666,
                                         84.99999999999999,
                                         86.,
                                         101.83333333333331,
                                         103.,
                                         73.5,
                                         74.33333333333333,
                                         76.49999999999999,
                                         77.33333333333333,
                                         108.16666666666666,
                                         109.33333333333333,
                                         95.,
                                         95.99999999999999,
                                         113.5,
                                         114.66666666666664,
                                         81.83333333333333,
                                         82.66666666666666,
                                         100.3611111111111,
                                         101.33333333333334,
                                         141.75,
                                         143.11111111111111,
                                         124.16666666666666,
                                         125.33333333333334,
                                         147.9722222222222,
                                         149.33333333333331,
                                         106.58333333333333,
                                         107.55555555555554,
                                         74.86111111111111,
                                         75.55555555555556,
                                         105.69444444444443,
                                         106.66666666666667,
                                         92.5,
                                         93.33333333333331,
                                         110.13888888888889,
                                         111.11111111111111,
                                         79.30555555555554,
                                         80.,
                                         87.3611111111111,
                                         88.05555555555554,
                                         123.19444444444443,
                                         124.16666666666666,
                                         107.5,
                                         108.33333333333333,
                                         127.63888888888889,
                                         128.61111111111111,
                                         91.80555555555554,
                                         92.49999999999999,
                                         126.74999999999999,
                                         127.7222222222222,
                                         178.69444444444443,
                                         180.05555555555554,
                                         155.83333333333334,
                                         157.,
                                         184.91666666666669,
                                         186.27777777777777,
                                         132.9722222222222,
                                         133.94444444444443,
                                         118.16666666666666,
                                         118.99999999999999,
                                         166.5,
                                         167.66666666666669,
                                         145.,
                                         145.99999999999997,
                                         171.83333333333331,
                                         172.99999999999997,
                                         123.49999999999999,
                                         124.33333333333334,
                                         126.49999999999999,
                                         127.33333333333334,
                                         178.16666666666669,
                                         179.33333333333331,
                                         154.99999999999997,
                                         155.99999999999997,
                                         183.49999999999997,
                                         184.66666666666669,
                                         131.83333333333334,
                                         132.66666666666666,
                                         158.69444444444446,
                                         159.66666666666666,
                                         223.41666666666666,
                                         224.7777777777778,
                                         194.16666666666666,
                                         195.33333333333334,
                                         229.63888888888889,
                                         230.99999999999997,
                                         164.91666666666666,
                                         165.88888888888889,
                                         116.52777777777777,
                                         117.22222222222223,
                                         164.02777777777777,
                                         165.,
                                         142.5,
                                         143.33333333333331,
                                         168.4722222222222,
                                         169.44444444444443,
                                         120.97222222222221,
                                         121.66666666666666};
  const std::array<int, 4> in_shape = {{3, 6, 5, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x5x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         0.5555555555555556,
                                         0.6666666666666666,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         2.2222222222222223,
                                         2.6666666666666665,
                                         4.,
                                         4.666666666666667,
                                         3.1111111111111107,
                                         3.5555555555555554,
                                         1.7777777777777777,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         5.333333333333334,
                                         5.999999999999999,
                                         9.,
                                         10.,
                                         6.666666666666666,
                                         7.333333333333333,
                                         3.6666666666666665,
                                         4.,
                                         4.333333333333334,
                                         4.666666666666666,
                                         9.333333333333332,
                                         10.,
                                         14.999999999999998,
                                         16.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         5.666666666666666,
                                         6.,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         7.5555555555555545,
                                         8.,
                                         11.999999999999998,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.888888888888888,
                                         4.444444444444445,
                                         4.666666666666666,
                                         2.111111111111111,
                                         2.2222222222222223,
                                         4.444444444444445,
                                         4.666666666666666,
                                         7.,
                                         7.333333333333332,
                                         4.888888888888888,
                                         5.111111111111111,
                                         2.5555555555555554,
                                         2.6666666666666665,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         6.222222222222221,
                                         6.444444444444444,
                                         3.222222222222222,
                                         3.333333333333333,
                                         6.222222222222221,
                                         6.444444444444445,
                                         12.888888888888888,
                                         13.333333333333332,
                                         20.,
                                         20.666666666666664,
                                         13.777777777777777,
                                         14.222222222222221,
                                         7.111111111111111,
                                         7.333333333333333,
                                         10.333333333333332,
                                         10.666666666666668,
                                         21.333333333333332,
                                         22.,
                                         33.,
                                         33.99999999999999,
                                         22.666666666666664,
                                         23.33333333333333,
                                         11.666666666666666,
                                         12.,
                                         12.333333333333332,
                                         12.666666666666666,
                                         25.333333333333332,
                                         26.,
                                         39.,
                                         40.,
                                         26.666666666666664,
                                         27.33333333333333,
                                         13.666666666666668,
                                         14.,
                                         8.88888888888889,
                                         9.11111111111111,
                                         18.22222222222222,
                                         18.666666666666668,
                                         27.999999999999996,
                                         28.666666666666664,
                                         19.11111111111111,
                                         19.555555555555554,
                                         9.777777777777779,
                                         10.,
                                         4.777777777777778,
                                         4.888888888888888,
                                         9.777777777777779,
                                         10.,
                                         15.,
                                         15.333333333333332,
                                         10.222222222222221,
                                         10.444444444444443,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         11.11111111111111,
                                         11.333333333333332,
                                         17.,
                                         17.333333333333332,
                                         11.555555555555554,
                                         11.777777777777779,
                                         5.888888888888888,
                                         6.,
                                         11.555555555555554,
                                         11.777777777777777,
                                         23.555555555555554,
                                         23.999999999999996,
                                         36.,
                                         36.666666666666664,
                                         24.444444444444443,
                                         24.888888888888886,
                                         12.444444444444443,
                                         12.666666666666666,
                                         18.333333333333332,
                                         18.666666666666664,
                                         37.33333333333333,
                                         38.,
                                         57.,
                                         57.99999999999999,
                                         38.666666666666664,
                                         39.33333333333333,
                                         19.666666666666664,
                                         20.,
                                         20.333333333333332,
                                         20.666666666666664,
                                         41.33333333333333,
                                         42.,
                                         62.99999999999999,
                                         64.,
                                         42.666666666666664,
                                         43.33333333333333,
                                         21.666666666666664,
                                         22.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         28.888888888888886,
                                         29.333333333333336,
                                         43.99999999999999,
                                         44.666666666666664,
                                         29.777777777777775,
                                         30.22222222222222,
                                         15.11111111111111,
                                         15.333333333333332,
                                         7.444444444444444,
                                         7.555555555555555,
                                         15.11111111111111,
                                         15.333333333333332,
                                         23.,
                                         23.333333333333332,
                                         15.555555555555554,
                                         15.777777777777779,
                                         7.888888888888888,
                                         8.};
  const std::array<int, 4> in_shape = {{3, 6, 5, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {7.361111111111111,
                                         8.055555555555555,
                                         8.75,
                                         9.444444444444443,
                                         12.083333333333332,
                                         13.055555555555554,
                                         14.027777777777777,
                                         14.999999999999998,
                                         14.166666666666666,
                                         15.,
                                         15.833333333333334,
                                         16.666666666666664,
                                         20.97222222222222,
                                         21.944444444444443,
                                         22.916666666666664,
                                         23.888888888888886,
                                         16.25,
                                         16.944444444444443,
                                         17.63888888888889,
                                         18.333333333333332,
                                         19.194444444444443,
                                         20.166666666666664,
                                         21.13888888888889,
                                         22.111111111111107,
                                         29.361111111111107,
                                         30.72222222222222,
                                         32.08333333333333,
                                         33.44444444444444,
                                         30.499999999999996,
                                         31.666666666666664,
                                         32.83333333333333,
                                         34.,
                                         41.80555555555555,
                                         43.166666666666664,
                                         44.52777777777777,
                                         45.888888888888886,
                                         31.63888888888889,
                                         32.61111111111111,
                                         33.58333333333333,
                                         34.55555555555556,
                                         35.5,
                                         36.33333333333333,
                                         37.166666666666664,
                                         38.,
                                         51.83333333333333,
                                         53.,
                                         54.16666666666666,
                                         55.333333333333336,
                                         49.,
                                         50.,
                                         51.,
                                         52.,
                                         62.499999999999986,
                                         63.666666666666664,
                                         64.83333333333333,
                                         66.,
                                         46.16666666666666,
                                         47.,
                                         47.83333333333333,
                                         48.66666666666666,
                                         52.166666666666664,
                                         53.,
                                         53.83333333333333,
                                         54.666666666666664,
                                         75.16666666666666,
                                         76.33333333333333,
                                         77.5,
                                         78.66666666666666,
                                         68.99999999999999,
                                         70.,
                                         70.99999999999999,
                                         72.,
                                         85.83333333333331,
                                         87.,
                                         88.16666666666666,
                                         89.33333333333331,
                                         62.83333333333332,
                                         63.66666666666666,
                                         64.5,
                                         65.33333333333333,
                                         83.08333333333333,
                                         84.05555555555554,
                                         85.02777777777777,
                                         86.,
                                         118.80555555555554,
                                         120.16666666666664,
                                         121.52777777777777,
                                         122.88888888888889,
                                         107.16666666666664,
                                         108.33333333333333,
                                         109.5,
                                         110.66666666666664,
                                         131.25,
                                         132.6111111111111,
                                         133.97222222222223,
                                         135.33333333333331,
                                         95.52777777777777,
                                         96.5,
                                         97.47222222222223,
                                         98.44444444444444,
                                         65.69444444444444,
                                         66.38888888888889,
                                         67.08333333333333,
                                         67.77777777777777,
                                         93.75,
                                         94.72222222222221,
                                         95.69444444444444,
                                         96.66666666666666,
                                         84.16666666666666,
                                         85.,
                                         85.83333333333334,
                                         86.66666666666666,
                                         102.63888888888889,
                                         103.6111111111111,
                                         104.58333333333333,
                                         105.55555555555554,
                                         74.58333333333333,
                                         75.27777777777777,
                                         75.97222222222223,
                                         76.66666666666666,
                                         90.69444444444444,
                                         91.38888888888889,
                                         92.08333333333333,
                                         92.77777777777777,
                                         128.75,
                                         129.7222222222222,
                                         130.69444444444443,
                                         131.66666666666666,
                                         114.16666666666667,
                                         115.,
                                         115.83333333333334,
                                         116.66666666666666,
                                         137.63888888888889,
                                         138.61111111111111,
                                         139.58333333333334,
                                         140.55555555555554,
                                         99.58333333333331,
                                         100.27777777777777,
                                         100.97222222222223,
                                         101.66666666666666,
                                         135.86111111111111,
                                         136.83333333333331,
                                         137.80555555555554,
                                         138.77777777777777,
                                         192.69444444444446,
                                         194.05555555555551,
                                         195.41666666666663,
                                         196.77777777777777,
                                         170.5,
                                         171.66666666666669,
                                         172.83333333333331,
                                         173.99999999999997,
                                         205.13888888888889,
                                         206.5,
                                         207.86111111111111,
                                         209.2222222222222,
                                         148.30555555555554,
                                         149.27777777777777,
                                         150.25,
                                         151.22222222222223,
                                         135.49999999999997,
                                         136.33333333333331,
                                         137.16666666666666,
                                         137.99999999999997,
                                         191.83333333333331,
                                         192.99999999999997,
                                         194.16666666666669,
                                         195.33333333333331,
                                         169.,
                                         169.99999999999997,
                                         171.,
                                         172.,
                                         202.5,
                                         203.66666666666663,
                                         204.83333333333331,
                                         206.,
                                         146.16666666666666,
                                         147.,
                                         147.83333333333331,
                                         148.66666666666666,
                                         152.16666666666666,
                                         152.99999999999997,
                                         153.83333333333331,
                                         154.66666666666666,
                                         215.16666666666669,
                                         216.33333333333331,
                                         217.5,
                                         218.66666666666666,
                                         189.,
                                         190.,
                                         190.99999999999997,
                                         191.99999999999997,
                                         225.83333333333331,
                                         227.,
                                         228.16666666666666,
                                         229.3333333333333,
                                         162.83333333333331,
                                         163.66666666666666,
                                         164.49999999999997,
                                         165.33333333333331,
                                         199.75,
                                         200.7222222222222,
                                         201.6944444444444,
                                         202.66666666666669,
                                         282.13888888888886,
                                         283.5,
                                         284.8611111111111,
                                         286.22222222222223,
                                         247.16666666666663,
                                         248.33333333333331,
                                         249.49999999999997,
                                         250.66666666666669,
                                         294.5833333333333,
                                         295.9444444444444,
                                         297.30555555555554,
                                         298.66666666666663,
                                         212.1944444444444,
                                         213.16666666666666,
                                         214.13888888888889,
                                         215.1111111111111,
                                         149.02777777777777,
                                         149.72222222222223,
                                         150.41666666666666,
                                         151.11111111111111,
                                         210.41666666666666,
                                         211.38888888888886,
                                         212.3611111111111,
                                         213.33333333333334,
                                         184.16666666666663,
                                         185.,
                                         185.83333333333331,
                                         186.66666666666663,
                                         219.30555555555554,
                                         220.27777777777777,
                                         221.25,
                                         222.22222222222223,
                                         157.91666666666666,
                                         158.6111111111111,
                                         159.30555555555554,
                                         160.,
                                         174.02777777777777,
                                         174.7222222222222,
                                         175.41666666666666,
                                         176.1111111111111,
                                         245.41666666666666,
                                         246.38888888888886,
                                         247.3611111111111,
                                         248.33333333333331,
                                         214.16666666666669,
                                         215.,
                                         215.83333333333331,
                                         216.66666666666666,
                                         254.30555555555554,
                                         255.27777777777777,
                                         256.25,
                                         257.22222222222223,
                                         182.91666666666666,
                                         183.6111111111111,
                                         184.30555555555554,
                                         184.99999999999997,
                                         252.52777777777774,
                                         253.49999999999997,
                                         254.4722222222222,
                                         255.4444444444444,
                                         356.02777777777777,
                                         357.38888888888886,
                                         358.74999999999994,
                                         360.1111111111111,
                                         310.5,
                                         311.6666666666667,
                                         312.8333333333333,
                                         314.,
                                         368.4722222222222,
                                         369.83333333333337,
                                         371.1944444444444,
                                         372.55555555555554,
                                         264.97222222222223,
                                         265.9444444444444,
                                         266.91666666666663,
                                         267.88888888888886,
                                         235.49999999999997,
                                         236.33333333333331,
                                         237.16666666666666,
                                         237.99999999999997,
                                         331.8333333333333,
                                         333.,
                                         334.16666666666663,
                                         335.33333333333337,
                                         289.,
                                         290.,
                                         291.,
                                         291.99999999999994,
                                         342.49999999999994,
                                         343.66666666666663,
                                         344.8333333333333,
                                         345.99999999999994,
                                         246.16666666666663,
                                         246.99999999999997,
                                         247.83333333333334,
                                         248.66666666666669,
                                         252.16666666666666,
                                         252.99999999999997,
                                         253.83333333333331,
                                         254.66666666666669,
                                         355.16666666666663,
                                         356.33333333333337,
                                         357.49999999999994,
                                         358.66666666666663,
                                         309.,
                                         309.99999999999994,
                                         311.,
                                         311.99999999999994,
                                         365.8333333333333,
                                         366.99999999999994,
                                         368.1666666666667,
                                         369.33333333333337,
                                         262.83333333333337,
                                         263.6666666666667,
                                         264.5,
                                         265.3333333333333,
                                         316.41666666666663,
                                         317.3888888888889,
                                         318.3611111111111,
                                         319.3333333333333,
                                         445.47222222222223,
                                         446.8333333333333,
                                         448.1944444444444,
                                         449.5555555555556,
                                         387.16666666666663,
                                         388.3333333333333,
                                         389.5,
                                         390.6666666666667,
                                         457.91666666666663,
                                         459.27777777777777,
                                         460.6388888888889,
                                         461.99999999999994,
                                         328.8611111111111,
                                         329.8333333333333,
                                         330.80555555555554,
                                         331.77777777777777,
                                         232.36111111111111,
                                         233.05555555555554,
                                         233.75,
                                         234.44444444444446,
                                         327.0833333333333,
                                         328.05555555555554,
                                         329.02777777777777,
                                         330.,
                                         284.16666666666663,
                                         285.,
                                         285.83333333333337,
                                         286.66666666666663,
                                         335.9722222222222,
                                         336.9444444444444,
                                         337.91666666666663,
                                         338.88888888888886,
                                         241.25,
                                         241.94444444444443,
                                         242.63888888888889,
                                         243.33333333333331};
  const std::array<int, 4> in_shape = {{3, 6, 5, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x5x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         1.,
                                         1.1111111111111112,
                                         1.222222222222222,
                                         1.3333333333333333,
                                         1.5555555555555556,
                                         1.7777777777777777,
                                         1.9999999999999998,
                                         2.2222222222222223,
                                         4.,
                                         4.444444444444445,
                                         4.888888888888889,
                                         5.333333333333333,
                                         7.333333333333333,
                                         8.,
                                         8.666666666666666,
                                         9.333333333333334,
                                         5.777777777777778,
                                         6.222222222222221,
                                         6.666666666666666,
                                         7.111111111111111,
                                         3.333333333333333,
                                         3.5555555555555554,
                                         3.7777777777777777,
                                         4.,
                                         4.333333333333333,
                                         4.666666666666666,
                                         5.,
                                         5.333333333333333,
                                         10.,
                                         10.666666666666668,
                                         11.333333333333334,
                                         11.999999999999998,
                                         17.,
                                         18.,
                                         19.,
                                         20.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         7.,
                                         7.333333333333333,
                                         7.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         8.666666666666668,
                                         9.,
                                         9.333333333333332,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         20.,
                                         29.,
                                         29.999999999999996,
                                         30.999999999999996,
                                         32.,
                                         20.666666666666664,
                                         21.333333333333332,
                                         22.,
                                         22.666666666666664,
                                         11.,
                                         11.333333333333332,
                                         11.666666666666668,
                                         12.,
                                         6.888888888888888,
                                         7.111111111111111,
                                         7.333333333333333,
                                         7.555555555555555,
                                         14.666666666666666,
                                         15.111111111111109,
                                         15.555555555555557,
                                         16.,
                                         23.333333333333332,
                                         23.999999999999996,
                                         24.666666666666668,
                                         25.333333333333332,
                                         16.444444444444443,
                                         16.888888888888886,
                                         17.333333333333332,
                                         17.777777777777775,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         4.111111111111111,
                                         4.222222222222222,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.666666666666666,
                                         8.88888888888889,
                                         9.11111111111111,
                                         9.333333333333332,
                                         13.666666666666666,
                                         14.,
                                         14.333333333333332,
                                         14.666666666666664,
                                         9.555555555555555,
                                         9.777777777777777,
                                         10.,
                                         10.222222222222221,
                                         5.,
                                         5.111111111111111,
                                         5.222222222222222,
                                         5.333333333333333,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.888888888888888,
                                         6.333333333333333,
                                         6.444444444444444,
                                         6.555555555555555,
                                         6.666666666666666,
                                         12.222222222222221,
                                         12.444444444444443,
                                         12.666666666666666,
                                         12.88888888888889,
                                         25.333333333333332,
                                         25.777777777777775,
                                         26.22222222222222,
                                         26.666666666666664,
                                         39.33333333333333,
                                         40.,
                                         40.666666666666664,
                                         41.33333333333333,
                                         27.111111111111107,
                                         27.555555555555554,
                                         28.,
                                         28.444444444444443,
                                         14.,
                                         14.222222222222221,
                                         14.444444444444443,
                                         14.666666666666666,
                                         20.333333333333332,
                                         20.666666666666664,
                                         21.,
                                         21.333333333333336,
                                         42.,
                                         42.666666666666664,
                                         43.333333333333336,
                                         44.,
                                         65.,
                                         66.,
                                         67.,
                                         67.99999999999999,
                                         44.666666666666664,
                                         45.33333333333333,
                                         46.,
                                         46.66666666666666,
                                         23.,
                                         23.333333333333332,
                                         23.666666666666664,
                                         24.,
                                         24.333333333333336,
                                         24.666666666666664,
                                         25.,
                                         25.333333333333332,
                                         49.99999999999999,
                                         50.666666666666664,
                                         51.33333333333333,
                                         52.,
                                         76.99999999999999,
                                         78.,
                                         79.,
                                         80.,
                                         52.66666666666666,
                                         53.33333333333333,
                                         54.,
                                         54.66666666666666,
                                         26.999999999999996,
                                         27.333333333333336,
                                         27.666666666666664,
                                         28.,
                                         17.555555555555557,
                                         17.77777777777778,
                                         18.,
                                         18.22222222222222,
                                         35.99999999999999,
                                         36.44444444444444,
                                         36.888888888888886,
                                         37.333333333333336,
                                         55.33333333333333,
                                         55.99999999999999,
                                         56.66666666666666,
                                         57.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         38.666666666666664,
                                         39.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         19.77777777777778,
                                         20.,
                                         9.444444444444445,
                                         9.555555555555555,
                                         9.666666666666666,
                                         9.777777777777777,
                                         19.333333333333332,
                                         19.555555555555557,
                                         19.77777777777778,
                                         20.,
                                         29.666666666666664,
                                         30.,
                                         30.333333333333336,
                                         30.666666666666664,
                                         20.22222222222222,
                                         20.444444444444443,
                                         20.666666666666664,
                                         20.888888888888886,
                                         10.333333333333332,
                                         10.444444444444445,
                                         10.555555555555555,
                                         10.666666666666666,
                                         10.777777777777777,
                                         10.888888888888888,
                                         11.,
                                         11.11111111111111,
                                         22.,
                                         22.22222222222222,
                                         22.444444444444443,
                                         22.666666666666664,
                                         33.666666666666664,
                                         34.,
                                         34.33333333333333,
                                         34.666666666666664,
                                         22.888888888888886,
                                         23.111111111111107,
                                         23.333333333333332,
                                         23.555555555555557,
                                         11.666666666666666,
                                         11.777777777777777,
                                         11.888888888888888,
                                         12.,
                                         22.888888888888886,
                                         23.111111111111107,
                                         23.333333333333332,
                                         23.555555555555554,
                                         46.66666666666667,
                                         47.11111111111111,
                                         47.55555555555555,
                                         47.99999999999999,
                                         71.33333333333333,
                                         72.,
                                         72.66666666666666,
                                         73.33333333333333,
                                         48.44444444444444,
                                         48.888888888888886,
                                         49.33333333333333,
                                         49.77777777777777,
                                         24.666666666666664,
                                         24.888888888888886,
                                         25.111111111111107,
                                         25.333333333333332,
                                         36.33333333333333,
                                         36.666666666666664,
                                         37.,
                                         37.33333333333333,
                                         74.,
                                         74.66666666666666,
                                         75.33333333333333,
                                         76.,
                                         112.99999999999999,
                                         114.,
                                         115.,
                                         115.99999999999999,
                                         76.66666666666666,
                                         77.33333333333333,
                                         78.,
                                         78.66666666666666,
                                         39.,
                                         39.33333333333333,
                                         39.666666666666664,
                                         40.,
                                         40.33333333333333,
                                         40.666666666666664,
                                         41.,
                                         41.33333333333333,
                                         82.,
                                         82.66666666666666,
                                         83.33333333333333,
                                         84.,
                                         124.99999999999999,
                                         125.99999999999999,
                                         126.99999999999999,
                                         128.,
                                         84.66666666666667,
                                         85.33333333333333,
                                         86.,
                                         86.66666666666666,
                                         43.,
                                         43.33333333333333,
                                         43.666666666666664,
                                         44.,
                                         28.22222222222222,
                                         28.444444444444443,
                                         28.666666666666664,
                                         28.888888888888886,
                                         57.33333333333333,
                                         57.77777777777777,
                                         58.22222222222222,
                                         58.66666666666667,
                                         87.33333333333333,
                                         87.99999999999999,
                                         88.66666666666666,
                                         89.33333333333333,
                                         59.11111111111111,
                                         59.55555555555555,
                                         59.99999999999999,
                                         60.44444444444444,
                                         30.,
                                         30.22222222222222,
                                         30.444444444444443,
                                         30.666666666666664,
                                         14.777777777777777,
                                         14.888888888888888,
                                         15.,
                                         15.11111111111111,
                                         30.,
                                         30.22222222222222,
                                         30.444444444444443,
                                         30.666666666666664,
                                         45.666666666666664,
                                         46.,
                                         46.33333333333333,
                                         46.666666666666664,
                                         30.888888888888886,
                                         31.111111111111107,
                                         31.33333333333333,
                                         31.555555555555557,
                                         15.666666666666666,
                                         15.777777777777777,
                                         15.888888888888888,
                                         16.};
  const std::array<int, 4> in_shape = {{3, 6, 5, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {2.6388888888888884,
                                         4.138888888888889,
                                         4.5,
                                         5.333333333333333,
                                         7.333333333333333,
                                         5.555555555555555,
                                         6.361111111111111,
                                         9.527777777777777,
                                         9.5,
                                         10.666666666666668,
                                         14.,
                                         10.444444444444445,
                                         11.166666666666664,
                                         16.166666666666664,
                                         14.999999999999998,
                                         16.,
                                         20.,
                                         14.666666666666666,
                                         16.166666666666664,
                                         23.166666666666668,
                                         21.,
                                         22.,
                                         27.,
                                         19.666666666666664,
                                         25.527777777777775,
                                         36.361111111111114,
                                         32.5,
                                         33.666666666666664,
                                         40.83333333333333,
                                         29.61111111111111,
                                         20.13888888888889,
                                         28.63888888888889,
                                         25.5,
                                         26.333333333333332,
                                         31.833333333333332,
                                         23.055555555555554,
                                         27.63888888888889,
                                         39.138888888888886,
                                         34.5,
                                         35.333333333333336,
                                         42.333333333333336,
                                         30.555555555555554,
                                         41.361111111111114,
                                         58.52777777777777,
                                         51.5,
                                         52.666666666666664,
                                         63.,
                                         45.44444444444444,
                                         41.166666666666664,
                                         58.166666666666664,
                                         51.,
                                         52.,
                                         62.,
                                         44.666666666666664,
                                         46.16666666666666,
                                         65.16666666666666,
                                         57.,
                                         57.99999999999999,
                                         69.,
                                         49.666666666666664,
                                         60.52777777777777,
                                         85.3611111111111,
                                         74.5,
                                         75.66666666666666,
                                         89.83333333333333,
                                         64.61111111111111,
                                         45.138888888888886,
                                         63.638888888888886,
                                         55.49999999999999,
                                         56.33333333333333,
                                         66.83333333333333,
                                         48.05555555555556,
                                         52.638888888888886,
                                         74.13888888888889,
                                         64.5,
                                         65.33333333333334,
                                         77.33333333333334,
                                         55.55555555555555,
                                         76.36111111111111,
                                         107.52777777777779,
                                         93.5,
                                         94.66666666666667,
                                         112.,
                                         80.44444444444444,
                                         71.16666666666666,
                                         100.16666666666667,
                                         87.,
                                         88.,
                                         104.,
                                         74.66666666666666,
                                         76.16666666666666,
                                         107.16666666666666,
                                         93.,
                                         94.,
                                         111.,
                                         79.66666666666666,
                                         95.52777777777776,
                                         134.3611111111111,
                                         116.5,
                                         117.66666666666664,
                                         138.83333333333331,
                                         99.61111111111111,
                                         70.13888888888889,
                                         98.63888888888889,
                                         85.5,
                                         86.33333333333333,
                                         101.83333333333333,
                                         73.05555555555556};
  const std::array<int, 4> in_shape = {{3, 6, 6, 1}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x6x1) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.3333333333333333,
                                         0.6666666666666666,
                                         1.,
                                         0.7777777777777777,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         1.5555555555555554,
                                         2.6666666666666665,
                                         3.333333333333333,
                                         2.444444444444444,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         3.6666666666666665,
                                         6.,
                                         7.,
                                         4.999999999999999,
                                         2.6666666666666665,
                                         3.,
                                         6.333333333333333,
                                         9.999999999999998,
                                         11.,
                                         7.666666666666665,
                                         4.,
                                         2.4444444444444446,
                                         5.111111111111111,
                                         8.,
                                         8.666666666666664,
                                         5.999999999999999,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         3.,
                                         4.666666666666666,
                                         5.,
                                         3.444444444444444,
                                         1.7777777777777777,
                                         1.8888888888888888,
                                         3.888888888888889,
                                         6.,
                                         6.333333333333333,
                                         4.333333333333334,
                                         2.2222222222222223,
                                         4.222222222222221,
                                         8.666666666666666,
                                         13.333333333333332,
                                         13.999999999999998,
                                         9.555555555555555,
                                         4.888888888888889,
                                         6.999999999999999,
                                         14.333333333333332,
                                         22.,
                                         22.999999999999996,
                                         15.666666666666666,
                                         8.,
                                         8.333333333333332,
                                         16.999999999999996,
                                         25.999999999999996,
                                         26.999999999999993,
                                         18.333333333333332,
                                         9.333333333333332,
                                         6.,
                                         12.222222222222221,
                                         18.666666666666664,
                                         19.333333333333332,
                                         13.11111111111111,
                                         6.666666666666666,
                                         3.222222222222222,
                                         6.555555555555555,
                                         10.,
                                         10.333333333333332,
                                         7.,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         7.444444444444445,
                                         11.333333333333334,
                                         11.666666666666666,
                                         7.888888888888889,
                                         4.,
                                         7.777777777777777,
                                         15.777777777777779,
                                         24.,
                                         24.666666666666664,
                                         16.666666666666664,
                                         8.444444444444445,
                                         12.333333333333332,
                                         25.,
                                         38.,
                                         38.99999999999999,
                                         26.333333333333332,
                                         13.333333333333332,
                                         13.666666666666666,
                                         27.666666666666664,
                                         41.99999999999999,
                                         43.,
                                         29.,
                                         14.666666666666664,
                                         9.555555555555555,
                                         19.333333333333332,
                                         29.333333333333332,
                                         29.999999999999996,
                                         20.22222222222222,
                                         10.222222222222221,
                                         5.,
                                         10.11111111111111,
                                         15.333333333333332,
                                         15.666666666666664,
                                         10.555555555555555,
                                         5.333333333333333};
  const std::array<int, 4> in_shape = {{3, 6, 6, 1}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {4.583333333333333,
                                         5.277777777777777,
                                         7.305555555555555,
                                         8.277777777777779,
                                         8.166666666666666,
                                         9.,
                                         9.833333333333332,
                                         10.666666666666666,
                                         13.694444444444443,
                                         14.666666666666666,
                                         10.416666666666666,
                                         11.11111111111111,
                                         11.75,
                                         12.722222222222221,
                                         17.694444444444443,
                                         19.055555555555554,
                                         17.833333333333332,
                                         19.,
                                         20.166666666666664,
                                         21.333333333333336,
                                         26.638888888888886,
                                         28.,
                                         19.916666666666664,
                                         20.88888888888889,
                                         21.499999999999996,
                                         22.33333333333333,
                                         31.166666666666664,
                                         32.33333333333333,
                                         29.,
                                         29.999999999999996,
                                         31.,
                                         32.,
                                         38.833333333333336,
                                         40.,
                                         28.499999999999996,
                                         29.333333333333332,
                                         31.499999999999993,
                                         32.33333333333333,
                                         45.16666666666666,
                                         46.333333333333336,
                                         41.,
                                         42.,
                                         43.,
                                         44.,
                                         52.83333333333333,
                                         54.,
                                         38.5,
                                         39.33333333333333,
                                         50.08333333333333,
                                         51.05555555555555,
                                         71.3611111111111,
                                         72.72222222222223,
                                         63.833333333333336,
                                         65.,
                                         66.16666666666666,
                                         67.33333333333333,
                                         80.30555555555554,
                                         81.66666666666666,
                                         58.25,
                                         59.22222222222222,
                                         39.58333333333333,
                                         40.27777777777778,
                                         56.30555555555556,
                                         57.27777777777778,
                                         50.166666666666664,
                                         51.,
                                         51.83333333333333,
                                         52.666666666666664,
                                         62.69444444444444,
                                         63.666666666666664,
                                         45.416666666666664,
                                         46.11111111111111,
                                         54.58333333333333,
                                         55.27777777777778,
                                         77.30555555555554,
                                         78.27777777777777,
                                         68.16666666666666,
                                         69.,
                                         69.83333333333333,
                                         70.66666666666667,
                                         83.69444444444443,
                                         84.66666666666667,
                                         60.41666666666666,
                                         61.11111111111111,
                                         81.75,
                                         82.72222222222223,
                                         115.69444444444443,
                                         117.05555555555554,
                                         101.83333333333333,
                                         103.,
                                         104.16666666666666,
                                         105.33333333333333,
                                         124.63888888888887,
                                         126.,
                                         89.91666666666666,
                                         90.88888888888889,
                                         81.49999999999999,
                                         82.33333333333333,
                                         115.16666666666666,
                                         116.33333333333333,
                                         100.99999999999999,
                                         102.,
                                         103.,
                                         104.,
                                         122.83333333333331,
                                         124.,
                                         88.49999999999999,
                                         89.33333333333333,
                                         91.49999999999999,
                                         92.33333333333331,
                                         129.16666666666669,
                                         130.33333333333331,
                                         113.,
                                         114.,
                                         114.99999999999999,
                                         115.99999999999999,
                                         136.83333333333334,
                                         138.,
                                         98.49999999999999,
                                         99.33333333333333,
                                         120.08333333333333,
                                         121.05555555555554,
                                         169.36111111111111,
                                         170.7222222222222,
                                         147.83333333333331,
                                         149.,
                                         150.16666666666666,
                                         151.33333333333331,
                                         178.30555555555554,
                                         179.66666666666666,
                                         128.25,
                                         129.22222222222223,
                                         89.58333333333333,
                                         90.27777777777777,
                                         126.30555555555554,
                                         127.27777777777777,
                                         110.16666666666666,
                                         110.99999999999999,
                                         111.83333333333331,
                                         112.66666666666666,
                                         132.69444444444443,
                                         133.66666666666666,
                                         95.41666666666666,
                                         96.11111111111111,
                                         104.58333333333331,
                                         105.27777777777777,
                                         147.30555555555554,
                                         148.27777777777777,
                                         128.16666666666666,
                                         129.,
                                         129.83333333333334,
                                         130.66666666666669,
                                         153.69444444444443,
                                         154.66666666666669,
                                         110.41666666666666,
                                         111.1111111111111,
                                         151.74999999999997,
                                         152.72222222222223,
                                         213.69444444444443,
                                         215.05555555555557,
                                         185.83333333333331,
                                         187.,
                                         188.16666666666666,
                                         189.33333333333334,
                                         222.63888888888886,
                                         224.,
                                         159.91666666666666,
                                         160.88888888888889,
                                         141.5,
                                         142.33333333333331,
                                         199.16666666666666,
                                         200.33333333333334,
                                         172.99999999999997,
                                         174.,
                                         174.99999999999997,
                                         176.,
                                         206.83333333333334,
                                         208.,
                                         148.5,
                                         149.33333333333331,
                                         151.49999999999997,
                                         152.33333333333331,
                                         213.16666666666663,
                                         214.33333333333331,
                                         185.,
                                         186.,
                                         187.,
                                         188.,
                                         220.83333333333331,
                                         222.,
                                         158.5,
                                         159.33333333333331,
                                         190.08333333333331,
                                         191.05555555555551,
                                         267.3611111111111,
                                         268.7222222222222,
                                         231.8333333333333,
                                         233.,
                                         234.16666666666666,
                                         235.3333333333333,
                                         276.30555555555554,
                                         277.66666666666663,
                                         198.25,
                                         199.22222222222223,
                                         139.58333333333331,
                                         140.27777777777777,
                                         196.30555555555554,
                                         197.27777777777777,
                                         170.16666666666666,
                                         171.,
                                         171.83333333333331,
                                         172.66666666666666,
                                         202.69444444444443,
                                         203.66666666666666,
                                         145.41666666666666,
                                         146.11111111111111};
  const std::array<int, 4> in_shape = {{3, 6, 6, 2}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x6x2) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.4444444444444444,
                                         0.6666666666666666,
                                         1.,
                                         1.3333333333333333,
                                         1.6666666666666665,
                                         2.,
                                         1.3333333333333333,
                                         1.5555555555555554,
                                         0.7777777777777777,
                                         0.8888888888888888,
                                         1.1111111111111112,
                                         1.3333333333333335,
                                         2.6666666666666665,
                                         3.1111111111111107,
                                         4.666666666666667,
                                         5.333333333333333,
                                         6.,
                                         6.666666666666666,
                                         4.444444444444445,
                                         4.888888888888888,
                                         2.444444444444444,
                                         2.6666666666666665,
                                         3.,
                                         3.3333333333333335,
                                         6.666666666666666,
                                         7.333333333333333,
                                         11.,
                                         12.,
                                         12.999999999999998,
                                         14.,
                                         9.333333333333332,
                                         9.999999999999998,
                                         5.,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         12.,
                                         12.666666666666666,
                                         19.,
                                         19.999999999999996,
                                         21.,
                                         22.,
                                         14.666666666666666,
                                         15.33333333333333,
                                         7.666666666666666,
                                         8.,
                                         4.666666666666666,
                                         4.888888888888889,
                                         9.777777777777779,
                                         10.222222222222221,
                                         15.333333333333332,
                                         16.,
                                         16.666666666666664,
                                         17.33333333333333,
                                         11.555555555555555,
                                         11.999999999999998,
                                         6.,
                                         6.222222222222221,
                                         2.7777777777777777,
                                         2.888888888888889,
                                         5.777777777777778,
                                         6.,
                                         9.,
                                         9.333333333333332,
                                         9.666666666666666,
                                         10.,
                                         6.666666666666666,
                                         6.888888888888888,
                                         3.444444444444444,
                                         3.5555555555555554,
                                         3.6666666666666665,
                                         3.7777777777777777,
                                         7.555555555555555,
                                         7.777777777777778,
                                         11.666666666666666,
                                         12.,
                                         12.333333333333332,
                                         12.666666666666666,
                                         8.444444444444443,
                                         8.666666666666668,
                                         4.333333333333333,
                                         4.444444444444445,
                                         8.222222222222221,
                                         8.444444444444443,
                                         16.88888888888889,
                                         17.333333333333332,
                                         26.,
                                         26.666666666666664,
                                         27.333333333333332,
                                         27.999999999999996,
                                         18.666666666666664,
                                         19.11111111111111,
                                         9.555555555555555,
                                         9.777777777777779,
                                         13.666666666666664,
                                         13.999999999999998,
                                         28.,
                                         28.666666666666664,
                                         42.99999999999999,
                                         44.,
                                         45.,
                                         45.99999999999999,
                                         30.666666666666664,
                                         31.333333333333332,
                                         15.666666666666666,
                                         16.,
                                         16.333333333333332,
                                         16.666666666666664,
                                         33.33333333333333,
                                         33.99999999999999,
                                         51.,
                                         51.99999999999999,
                                         53.,
                                         53.999999999999986,
                                         36.,
                                         36.666666666666664,
                                         18.333333333333332,
                                         18.666666666666664,
                                         11.777777777777777,
                                         12.,
                                         24.,
                                         24.444444444444443,
                                         36.666666666666664,
                                         37.33333333333333,
                                         38.,
                                         38.666666666666664,
                                         25.77777777777778,
                                         26.22222222222222,
                                         13.11111111111111,
                                         13.333333333333332,
                                         6.333333333333333,
                                         6.444444444444444,
                                         12.88888888888889,
                                         13.11111111111111,
                                         19.666666666666668,
                                         20.,
                                         20.333333333333332,
                                         20.666666666666664,
                                         13.777777777777779,
                                         14.,
                                         7.,
                                         7.111111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         14.666666666666664,
                                         14.88888888888889,
                                         22.33333333333333,
                                         22.666666666666668,
                                         23.,
                                         23.333333333333332,
                                         15.555555555555554,
                                         15.777777777777779,
                                         7.888888888888888,
                                         8.,
                                         15.333333333333332,
                                         15.555555555555554,
                                         31.111111111111107,
                                         31.555555555555557,
                                         47.33333333333333,
                                         48.,
                                         48.666666666666664,
                                         49.33333333333333,
                                         32.888888888888886,
                                         33.33333333333333,
                                         16.666666666666664,
                                         16.88888888888889,
                                         24.333333333333332,
                                         24.666666666666664,
                                         49.33333333333333,
                                         50.,
                                         74.99999999999999,
                                         76.,
                                         77.,
                                         77.99999999999999,
                                         51.99999999999999,
                                         52.666666666666664,
                                         26.33333333333333,
                                         26.666666666666664,
                                         27.,
                                         27.333333333333332,
                                         54.66666666666666,
                                         55.33333333333333,
                                         82.99999999999999,
                                         83.99999999999999,
                                         84.99999999999999,
                                         86.,
                                         57.33333333333333,
                                         58.,
                                         29.,
                                         29.33333333333333,
                                         18.888888888888886,
                                         19.11111111111111,
                                         38.222222222222214,
                                         38.666666666666664,
                                         57.999999999999986,
                                         58.666666666666664,
                                         59.33333333333333,
                                         59.99999999999999,
                                         40.,
                                         40.44444444444444,
                                         20.22222222222222,
                                         20.444444444444443,
                                         9.888888888888888,
                                         10.,
                                         20.,
                                         20.22222222222222,
                                         30.333333333333332,
                                         30.666666666666664,
                                         31.,
                                         31.33333333333333,
                                         20.888888888888886,
                                         21.11111111111111,
                                         10.555555555555555,
                                         10.666666666666666};
  const std::array<int, 4> in_shape = {{3, 6, 6, 2}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, SAME3x6x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {8.472222222222221,
                                         9.166666666666666,
                                         9.86111111111111,
                                         10.555555555555554,
                                         13.638888888888888,
                                         14.61111111111111,
                                         15.583333333333334,
                                         16.555555555555557,
                                         15.499999999999998,
                                         16.333333333333332,
                                         17.166666666666668,
                                         18.,
                                         18.833333333333332,
                                         19.666666666666664,
                                         20.5,
                                         21.333333333333332,
                                         26.416666666666664,
                                         27.388888888888886,
                                         28.36111111111111,
                                         29.333333333333332,
                                         20.138888888888886,
                                         20.833333333333332,
                                         21.527777777777775,
                                         22.22222222222222,
                                         22.527777777777775,
                                         23.5,
                                         24.47222222222222,
                                         25.444444444444443,
                                         34.02777777777778,
                                         35.388888888888886,
                                         36.75,
                                         38.11111111111111,
                                         34.49999999999999,
                                         35.666666666666664,
                                         36.833333333333336,
                                         38.,
                                         39.166666666666664,
                                         40.33333333333333,
                                         41.5,
                                         42.66666666666667,
                                         51.916666666666664,
                                         53.27777777777777,
                                         54.638888888888886,
                                         56.,
                                         38.86111111111111,
                                         39.83333333333333,
                                         40.80555555555555,
                                         41.77777777777778,
                                         42.166666666666664,
                                         42.99999999999999,
                                         43.833333333333336,
                                         44.66666666666666,
                                         61.166666666666664,
                                         62.33333333333333,
                                         63.5,
                                         64.66666666666666,
                                         57.,
                                         58.,
                                         59.,
                                         59.99999999999999,
                                         60.99999999999999,
                                         62.,
                                         63.,
                                         64.,
                                         76.5,
                                         77.66666666666667,
                                         78.83333333333331,
                                         80.,
                                         56.166666666666664,
                                         56.99999999999999,
                                         57.83333333333333,
                                         58.666666666666664,
                                         62.166666666666664,
                                         62.999999999999986,
                                         63.83333333333333,
                                         64.66666666666666,
                                         89.16666666666667,
                                         90.33333333333331,
                                         91.49999999999999,
                                         92.66666666666667,
                                         81.,
                                         82.,
                                         82.99999999999999,
                                         84.,
                                         85.,
                                         86.,
                                         86.99999999999999,
                                         88.,
                                         104.5,
                                         105.66666666666666,
                                         106.83333333333331,
                                         108.,
                                         76.16666666666666,
                                         77.,
                                         77.83333333333333,
                                         78.66666666666666,
                                         99.19444444444444,
                                         100.16666666666666,
                                         101.13888888888889,
                                         102.1111111111111,
                                         141.3611111111111,
                                         142.7222222222222,
                                         144.08333333333334,
                                         145.44444444444446,
                                         126.5,
                                         127.66666666666667,
                                         128.83333333333331,
                                         130.,
                                         131.16666666666666,
                                         132.33333333333331,
                                         133.49999999999997,
                                         134.66666666666666,
                                         159.25,
                                         160.6111111111111,
                                         161.97222222222223,
                                         163.33333333333331,
                                         115.52777777777777,
                                         116.5,
                                         117.47222222222223,
                                         118.44444444444444,
                                         78.47222222222221,
                                         79.16666666666666,
                                         79.86111111111111,
                                         80.55555555555556,
                                         111.63888888888887,
                                         112.61111111111111,
                                         113.58333333333333,
                                         114.55555555555556,
                                         99.5,
                                         100.33333333333333,
                                         101.16666666666666,
                                         102.,
                                         102.83333333333333,
                                         103.66666666666666,
                                         104.5,
                                         105.33333333333333,
                                         124.41666666666666,
                                         125.38888888888889,
                                         126.36111111111111,
                                         127.33333333333333,
                                         90.13888888888889,
                                         90.83333333333333,
                                         91.52777777777777,
                                         92.22222222222221,
                                         108.47222222222223,
                                         109.16666666666666,
                                         109.8611111111111,
                                         110.55555555555556,
                                         153.63888888888889,
                                         154.6111111111111,
                                         155.58333333333334,
                                         156.55555555555554,
                                         135.5,
                                         136.33333333333331,
                                         137.16666666666666,
                                         138.,
                                         138.83333333333331,
                                         139.66666666666666,
                                         140.5,
                                         141.33333333333334,
                                         166.41666666666666,
                                         167.38888888888886,
                                         168.36111111111111,
                                         169.33333333333334,
                                         120.13888888888889,
                                         120.83333333333331,
                                         121.52777777777776,
                                         122.22222222222221,
                                         162.52777777777777,
                                         163.5,
                                         164.4722222222222,
                                         165.44444444444446,
                                         230.02777777777777,
                                         231.38888888888886,
                                         232.75,
                                         234.1111111111111,
                                         202.5,
                                         203.66666666666666,
                                         204.83333333333331,
                                         206.,
                                         207.16666666666666,
                                         208.33333333333331,
                                         209.5,
                                         210.66666666666666,
                                         247.91666666666666,
                                         249.27777777777774,
                                         250.63888888888886,
                                         252.,
                                         178.86111111111111,
                                         179.83333333333331,
                                         180.80555555555554,
                                         181.77777777777777,
                                         162.16666666666663,
                                         162.99999999999997,
                                         163.83333333333331,
                                         164.66666666666666,
                                         229.16666666666663,
                                         230.33333333333331,
                                         231.5,
                                         232.66666666666666,
                                         201.,
                                         201.99999999999997,
                                         203.,
                                         204.,
                                         204.99999999999997,
                                         206.,
                                         207.,
                                         208.,
                                         244.49999999999997,
                                         245.66666666666663,
                                         246.83333333333331,
                                         248.,
                                         176.16666666666666,
                                         176.99999999999997,
                                         177.83333333333331,
                                         178.66666666666666,
                                         182.16666666666669,
                                         182.99999999999997,
                                         183.83333333333331,
                                         184.66666666666663,
                                         257.16666666666663,
                                         258.33333333333337,
                                         259.5,
                                         260.66666666666663,
                                         225.,
                                         226.,
                                         227.,
                                         228.,
                                         228.99999999999997,
                                         229.99999999999997,
                                         231.,
                                         231.99999999999997,
                                         272.5,
                                         273.6666666666667,
                                         274.8333333333333,
                                         276.,
                                         196.16666666666666,
                                         196.99999999999997,
                                         197.83333333333331,
                                         198.66666666666666,
                                         239.19444444444446,
                                         240.16666666666666,
                                         241.13888888888889,
                                         242.1111111111111,
                                         337.3611111111111,
                                         338.72222222222223,
                                         340.0833333333333,
                                         341.4444444444444,
                                         294.5,
                                         295.66666666666663,
                                         296.8333333333333,
                                         298.,
                                         299.16666666666663,
                                         300.3333333333333,
                                         301.5,
                                         302.66666666666663,
                                         355.25,
                                         356.6111111111111,
                                         357.97222222222223,
                                         359.3333333333333,
                                         255.52777777777777,
                                         256.5,
                                         257.4722222222222,
                                         258.44444444444446,
                                         178.47222222222223,
                                         179.16666666666666,
                                         179.86111111111111,
                                         180.55555555555554,
                                         251.63888888888886,
                                         252.6111111111111,
                                         253.58333333333331,
                                         254.55555555555554,
                                         219.49999999999997,
                                         220.33333333333331,
                                         221.16666666666663,
                                         221.99999999999997,
                                         222.83333333333331,
                                         223.66666666666663,
                                         224.49999999999997,
                                         225.33333333333331,
                                         264.41666666666663,
                                         265.38888888888886,
                                         266.3611111111111,
                                         267.3333333333333,
                                         190.13888888888889,
                                         190.83333333333331,
                                         191.52777777777777,
                                         192.22222222222223,
                                         208.47222222222223,
                                         209.16666666666663,
                                         209.8611111111111,
                                         210.55555555555554,
                                         293.63888888888886,
                                         294.6111111111111,
                                         295.58333333333337,
                                         296.55555555555554,
                                         255.5,
                                         256.3333333333333,
                                         257.1666666666667,
                                         258.,
                                         258.8333333333333,
                                         259.6666666666667,
                                         260.5,
                                         261.33333333333337,
                                         306.41666666666663,
                                         307.38888888888886,
                                         308.3611111111111,
                                         309.33333333333337,
                                         220.13888888888886,
                                         220.83333333333331,
                                         221.52777777777777,
                                         222.2222222222222,
                                         302.5277777777778,
                                         303.49999999999994,
                                         304.4722222222222,
                                         305.44444444444446,
                                         426.02777777777777,
                                         427.38888888888886,
                                         428.75,
                                         430.11111111111114,
                                         370.5,
                                         371.66666666666663,
                                         372.8333333333333,
                                         374.,
                                         375.16666666666663,
                                         376.3333333333333,
                                         377.5,
                                         378.6666666666667,
                                         443.91666666666663,
                                         445.2777777777777,
                                         446.63888888888886,
                                         448.,
                                         318.8611111111111,
                                         319.8333333333333,
                                         320.80555555555554,
                                         321.77777777777777,
                                         282.16666666666663,
                                         283.,
                                         283.83333333333337,
                                         284.66666666666663,
                                         397.16666666666663,
                                         398.3333333333333,
                                         399.5,
                                         400.6666666666667,
                                         345.,
                                         345.99999999999994,
                                         347.,
                                         348.,
                                         349.,
                                         349.99999999999994,
                                         351.,
                                         352.,
                                         412.5,
                                         413.6666666666667,
                                         414.8333333333333,
                                         416.,
                                         296.16666666666663,
                                         297.,
                                         297.8333333333333,
                                         298.66666666666663,
                                         302.16666666666663,
                                         302.99999999999994,
                                         303.83333333333337,
                                         304.66666666666663,
                                         425.16666666666663,
                                         426.33333333333326,
                                         427.5,
                                         428.66666666666663,
                                         369.,
                                         370.,
                                         370.99999999999994,
                                         372.,
                                         372.99999999999994,
                                         374.,
                                         374.99999999999994,
                                         376.,
                                         440.5,
                                         441.66666666666663,
                                         442.83333333333326,
                                         444.,
                                         316.16666666666663,
                                         317.,
                                         317.8333333333333,
                                         318.66666666666663,
                                         379.1944444444444,
                                         380.16666666666663,
                                         381.1388888888889,
                                         382.11111111111103,
                                         533.3611111111111,
                                         534.7222222222222,
                                         536.0833333333334,
                                         537.4444444444443,
                                         462.5,
                                         463.6666666666666,
                                         464.8333333333333,
                                         466.,
                                         467.1666666666667,
                                         468.3333333333333,
                                         469.5,
                                         470.6666666666666,
                                         551.25,
                                         552.6111111111111,
                                         553.9722222222222,
                                         555.3333333333333,
                                         395.52777777777777,
                                         396.5,
                                         397.4722222222222,
                                         398.44444444444446,
                                         278.47222222222223,
                                         279.16666666666663,
                                         279.8611111111111,
                                         280.55555555555554,
                                         391.63888888888886,
                                         392.6111111111111,
                                         393.5833333333333,
                                         394.55555555555554,
                                         339.5,
                                         340.3333333333333,
                                         341.16666666666663,
                                         342.,
                                         342.8333333333333,
                                         343.66666666666663,
                                         344.5,
                                         345.3333333333333,
                                         404.41666666666663,
                                         405.38888888888886,
                                         406.3611111111111,
                                         407.3333333333333,
                                         290.13888888888886,
                                         290.8333333333333,
                                         291.52777777777777,
                                         292.22222222222223};
  const std::array<int, 4> in_shape = {{3, 6, 6, 4}};
  const auto padding = PaddingMode::SAME;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
TYPED_TEST(AvgWindow3Stride1Grad, VALID3x6x6x4) {
  using DataType = typename TestFixture::DataType;
  const std::vector<DataType> exp_out = {0.1111111111111111,
                                         0.2222222222222222,
                                         0.3333333333333333,
                                         0.4444444444444444,
                                         0.6666666666666667,
                                         0.8888888888888888,
                                         1.111111111111111,
                                         1.3333333333333333,
                                         1.6666666666666667,
                                         2.,
                                         2.333333333333333,
                                         2.6666666666666665,
                                         3.,
                                         3.333333333333333,
                                         3.666666666666666,
                                         4.,
                                         2.4444444444444446,
                                         2.6666666666666665,
                                         2.8888888888888884,
                                         3.1111111111111107,
                                         1.4444444444444444,
                                         1.5555555555555554,
                                         1.6666666666666665,
                                         1.7777777777777777,
                                         2.,
                                         2.2222222222222223,
                                         2.4444444444444446,
                                         2.666666666666667,
                                         4.888888888888888,
                                         5.333333333333333,
                                         5.777777777777778,
                                         6.222222222222221,
                                         8.666666666666666,
                                         9.333333333333334,
                                         10.,
                                         10.666666666666666,
                                         11.333333333333332,
                                         12.,
                                         12.666666666666666,
                                         13.333333333333332,
                                         8.444444444444445,
                                         8.88888888888889,
                                         9.333333333333332,
                                         9.777777777777777,
                                         4.666666666666666,
                                         4.888888888888888,
                                         5.111111111111111,
                                         5.333333333333333,
                                         5.666666666666666,
                                         6.,
                                         6.333333333333334,
                                         6.666666666666667,
                                         12.666666666666666,
                                         13.333333333333332,
                                         14.,
                                         14.666666666666666,
                                         21.,
                                         22.,
                                         23.,
                                         24.,
                                         25.,
                                         25.999999999999996,
                                         27.,
                                         28.,
                                         18.,
                                         18.666666666666664,
                                         19.333333333333332,
                                         19.999999999999996,
                                         9.666666666666666,
                                         10.,
                                         10.333333333333332,
                                         10.666666666666666,
                                         11.,
                                         11.333333333333332,
                                         11.666666666666666,
                                         12.,
                                         23.333333333333332,
                                         24.,
                                         24.666666666666668,
                                         25.333333333333332,
                                         37.,
                                         38.,
                                         39.,
                                         39.99999999999999,
                                         41.,
                                         42.,
                                         43.,
                                         44.,
                                         28.666666666666668,
                                         29.333333333333332,
                                         30.,
                                         30.66666666666666,
                                         15.,
                                         15.333333333333332,
                                         15.666666666666666,
                                         16.,
                                         9.11111111111111,
                                         9.333333333333332,
                                         9.555555555555555,
                                         9.777777777777779,
                                         19.11111111111111,
                                         19.555555555555557,
                                         20.,
                                         20.444444444444443,
                                         29.999999999999996,
                                         30.666666666666664,
                                         31.33333333333333,
                                         32.,
                                         32.666666666666664,
                                         33.33333333333333,
                                         34.,
                                         34.66666666666666,
                                         22.666666666666668,
                                         23.11111111111111,
                                         23.555555555555557,
                                         23.999999999999996,
                                         11.777777777777779,
                                         12.,
                                         12.222222222222221,
                                         12.444444444444443,
                                         5.444444444444444,
                                         5.555555555555555,
                                         5.666666666666666,
                                         5.777777777777778,
                                         11.333333333333332,
                                         11.555555555555555,
                                         11.777777777777777,
                                         12.,
                                         17.666666666666664,
                                         18.,
                                         18.333333333333332,
                                         18.666666666666664,
                                         19.,
                                         19.333333333333332,
                                         19.666666666666664,
                                         20.,
                                         13.11111111111111,
                                         13.333333333333332,
                                         13.555555555555555,
                                         13.777777777777777,
                                         6.777777777777778,
                                         6.888888888888888,
                                         7.,
                                         7.111111111111111,
                                         7.222222222222221,
                                         7.333333333333333,
                                         7.444444444444444,
                                         7.555555555555555,
                                         14.888888888888888,
                                         15.11111111111111,
                                         15.333333333333332,
                                         15.555555555555555,
                                         23.,
                                         23.333333333333332,
                                         23.666666666666664,
                                         24.,
                                         24.333333333333332,
                                         24.666666666666664,
                                         25.,
                                         25.333333333333332,
                                         16.666666666666664,
                                         16.888888888888886,
                                         17.111111111111107,
                                         17.333333333333336,
                                         8.555555555555555,
                                         8.666666666666666,
                                         8.777777777777777,
                                         8.88888888888889,
                                         16.22222222222222,
                                         16.444444444444443,
                                         16.666666666666664,
                                         16.888888888888886,
                                         33.33333333333333,
                                         33.77777777777778,
                                         34.22222222222222,
                                         34.666666666666664,
                                         51.33333333333333,
                                         52.,
                                         52.66666666666666,
                                         53.33333333333333,
                                         54.,
                                         54.666666666666664,
                                         55.33333333333333,
                                         55.99999999999999,
                                         36.888888888888886,
                                         37.33333333333333,
                                         37.77777777777777,
                                         38.22222222222222,
                                         18.888888888888886,
                                         19.11111111111111,
                                         19.333333333333332,
                                         19.555555555555557,
                                         27.,
                                         27.33333333333333,
                                         27.666666666666664,
                                         27.999999999999996,
                                         55.33333333333333,
                                         56.,
                                         56.666666666666664,
                                         57.33333333333333,
                                         85.,
                                         85.99999999999999,
                                         86.99999999999999,
                                         88.,
                                         89.00000000000001,
                                         90.,
                                         90.99999999999999,
                                         91.99999999999999,
                                         60.66666666666666,
                                         61.33333333333333,
                                         61.999999999999986,
                                         62.666666666666664,
                                         30.999999999999996,
                                         31.333333333333332,
                                         31.666666666666664,
                                         32.,
                                         32.333333333333336,
                                         32.666666666666664,
                                         33.,
                                         33.33333333333333,
                                         66.,
                                         66.66666666666666,
                                         67.33333333333333,
                                         67.99999999999999,
                                         100.99999999999999,
                                         102.,
                                         102.99999999999999,
                                         103.99999999999999,
                                         104.99999999999999,
                                         106.,
                                         107.00000000000001,
                                         107.99999999999997,
                                         71.33333333333333,
                                         72.,
                                         72.66666666666666,
                                         73.33333333333333,
                                         36.33333333333333,
                                         36.666666666666664,
                                         37.,
                                         37.33333333333333,
                                         23.333333333333332,
                                         23.555555555555554,
                                         23.77777777777778,
                                         24.,
                                         47.55555555555556,
                                         48.,
                                         48.44444444444444,
                                         48.888888888888886,
                                         72.66666666666666,
                                         73.33333333333333,
                                         74.,
                                         74.66666666666666,
                                         75.33333333333333,
                                         76.,
                                         76.66666666666666,
                                         77.33333333333333,
                                         51.11111111111111,
                                         51.55555555555556,
                                         52.,
                                         52.44444444444444,
                                         26.,
                                         26.22222222222222,
                                         26.444444444444443,
                                         26.666666666666664,
                                         12.555555555555555,
                                         12.666666666666666,
                                         12.777777777777777,
                                         12.888888888888888,
                                         25.555555555555557,
                                         25.77777777777778,
                                         26.,
                                         26.22222222222222,
                                         39.,
                                         39.333333333333336,
                                         39.666666666666664,
                                         40.,
                                         40.33333333333333,
                                         40.666666666666664,
                                         41.,
                                         41.33333333333333,
                                         27.33333333333333,
                                         27.555555555555557,
                                         27.77777777777778,
                                         28.,
                                         13.888888888888888,
                                         14.,
                                         14.11111111111111,
                                         14.222222222222221,
                                         14.333333333333332,
                                         14.444444444444443,
                                         14.555555555555555,
                                         14.666666666666666,
                                         29.111111111111107,
                                         29.33333333333333,
                                         29.555555555555557,
                                         29.77777777777778,
                                         44.33333333333333,
                                         44.66666666666666,
                                         45.,
                                         45.333333333333336,
                                         45.666666666666664,
                                         46.,
                                         46.33333333333333,
                                         46.666666666666664,
                                         30.888888888888886,
                                         31.111111111111107,
                                         31.33333333333333,
                                         31.555555555555557,
                                         15.666666666666666,
                                         15.777777777777777,
                                         15.888888888888888,
                                         16.,
                                         30.444444444444443,
                                         30.666666666666664,
                                         30.888888888888886,
                                         31.111111111111107,
                                         61.77777777777777,
                                         62.222222222222214,
                                         62.666666666666664,
                                         63.111111111111114,
                                         94.,
                                         94.66666666666666,
                                         95.33333333333334,
                                         96.,
                                         96.66666666666666,
                                         97.33333333333333,
                                         98.,
                                         98.66666666666666,
                                         65.33333333333333,
                                         65.77777777777777,
                                         66.22222222222221,
                                         66.66666666666666,
                                         33.11111111111111,
                                         33.33333333333333,
                                         33.55555555555555,
                                         33.77777777777778,
                                         48.33333333333333,
                                         48.666666666666664,
                                         49.,
                                         49.33333333333333,
                                         97.99999999999999,
                                         98.66666666666666,
                                         99.33333333333333,
                                         100.,
                                         149.,
                                         149.99999999999997,
                                         151.,
                                         152.,
                                         153.,
                                         154.,
                                         155.,
                                         155.99999999999997,
                                         103.33333333333331,
                                         103.99999999999999,
                                         104.66666666666666,
                                         105.33333333333333,
                                         52.33333333333333,
                                         52.66666666666666,
                                         52.99999999999999,
                                         53.33333333333333,
                                         53.666666666666664,
                                         54.,
                                         54.33333333333333,
                                         54.666666666666664,
                                         108.66666666666666,
                                         109.33333333333331,
                                         110.,
                                         110.66666666666666,
                                         164.99999999999997,
                                         165.99999999999997,
                                         167.,
                                         167.99999999999997,
                                         168.99999999999997,
                                         169.99999999999997,
                                         171.,
                                         172.,
                                         113.99999999999999,
                                         114.66666666666666,
                                         115.33333333333331,
                                         116.,
                                         57.666666666666664,
                                         58.,
                                         58.33333333333333,
                                         58.66666666666666,
                                         37.55555555555556,
                                         37.77777777777777,
                                         38.,
                                         38.22222222222222,
                                         76.,
                                         76.44444444444443,
                                         76.88888888888889,
                                         77.33333333333333,
                                         115.33333333333333,
                                         115.99999999999997,
                                         116.66666666666666,
                                         117.33333333333333,
                                         118.,
                                         118.66666666666666,
                                         119.33333333333331,
                                         119.99999999999999,
                                         79.55555555555556,
                                         80.,
                                         80.44444444444443,
                                         80.88888888888889,
                                         40.22222222222222,
                                         40.44444444444444,
                                         40.666666666666664,
                                         40.888888888888886,
                                         19.666666666666664,
                                         19.777777777777775,
                                         19.88888888888889,
                                         20.,
                                         39.77777777777777,
                                         40.,
                                         40.22222222222222,
                                         40.44444444444444,
                                         60.33333333333333,
                                         60.666666666666664,
                                         61.,
                                         61.33333333333333,
                                         61.666666666666664,
                                         62.,
                                         62.33333333333333,
                                         62.66666666666666,
                                         41.55555555555556,
                                         41.77777777777777,
                                         42.,
                                         42.22222222222222,
                                         21.,
                                         21.11111111111111,
                                         21.22222222222222,
                                         21.333333333333332};
  const std::array<int, 4> in_shape = {{3, 6, 6, 4}};
  const auto padding = PaddingMode::VALID;
  const auto params = getPoolingParams<3, 1>(in_shape, padding);
  const DataType max_input_val = 2048.0;
  this->test_pool(exp_out, params, max_input_val);
}
